| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3769 人关注过本帖, 2 人收藏
标题:[原创]如何编写自己的图形开发包 — 第一章 实现图形初始化
只看楼主 加入收藏
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
结帖率:100%
收藏(2)
 问题点数:0 回复次数:10 
[原创]如何编写自己的图形开发包 — 第一章 实现图形初始化
此文章出至 [url]www.[/url]   作者:孙靖

[bold]第一章
实现图形初始化[/bold]



    要实现这个,在代码上来说,其实就那么10来行代码。真的太简单了,我都不好意思拿出来现眼。我更关心的是,为大家解释一下图形模式。
    在这我不想给您把显示器光栅原理,硬件实现说的个底朝天,我也没那么深的功力。如果下面我说的您还是不能理解,那就先记住,再去看代码,运行一下实例有那么个印象就可以啦。
    我们的机器在跑起来的时候并不是直接就到了绚丽多彩的图形模式。(如我们的WIN)他也是要经过一系列的初始化工作才能让我们的机器基于图形模式,至于他怎么实现那是硬件工程师操心的事我们不用太过多操心啦。
   
    图形模式我们只要记住两个概念,分辨率+色深。
    分辨率:这个我想不用我多加说明吧,比如我们需要一个320X200大小的画面。那么我们就需要编写一定代码去把我们的机器设置成这样的模式。
    色深:也许有的朋友很清楚啦,可这个也是让很多初学者揣摩很久的概念。他的意思就是,我们的机器能显示多少种颜色,这个也是需要我们去设置的。

    有心人看了以上两条应该能得到这样一个结论:我们需要什么图形模式,一定是我们的机器自身就具备的。这个是个基础,是个根本。如果你使用机器根本不具备某种图形模式,你再怎么设置也是惘然不会出你想要的效果。可值得庆幸的是,我所介绍的内容在我们现今的机器上是一定可以实现的。
    在这里我们打算实现的图形模式有:
    320X200  - 256色(8位色深)
    640X480  - 256色(8位色深)
    800X600  - 256色(8位色深)
    1024X768 - 256色(8位色深)
    哦!就这么简单的几种模式?小弟无能啊,我看我只能讲这么多,其实只要理解并会实现这几个模式,16位色深、24位色深的伪彩,甚至32位色深的真彩实现也就是这么个方法。后面要有时间会适当的介绍高色深的实现。

代码:
/*===对常用类型进行可移植性封装===*/
typedef char               BOOL;
typedef char               INT8;
typedef short              INT16;
typedef long               INT32;
typedef long long          INT64;
typedef unsigned char      UINT8;
typedef unsigned short     UINT16;
typedef unsigned long      UINT32;
typedef unsigned long long UINT64;

/*===      几种图形模式宏      ===*/
#define    TRY320X200X256    0X103
#define    TRY640X480X256    0X101
#define    TRY800X600X256    0X103
#define    TRY1024X768X256   0X105

void SetSVGAMode(INT16 vmode);        /* 设置图形模式     */
void SetSVGAMode(INT16 vmode)
{
    _AX = 0x4f02;            
    _BX = vmode;
    __int__(0x10);            /* 设置好寄存器,并完成初始化     */
}

    简单吧?什么?不懂?不懂没关系,记住就是啦。我开始也不懂,记得上面说过的吗?某种图形模式是要我们的机器本身具备这个能力,我们只是做些设置将其初始化为某种模式。看到上面的代码,其实就是做了点设置工作。DOS下,你只要这样做就可以实现图形初始化啦。比如,初始化成320X200 - 256色(8位色深),只要SetSVGAMode(TRY320X200X256);就OK了。您可以运行char01-main1的实例,此时您除了看到一个黑乎乎的屏什么也看不到,不过他的确是实现了图形模式。
强烈建议各位在运行这些实例的时候使用DOSBox虚拟机。为什么要使用他呢?因为目前很多机器你直接运行DOS下的高分辨率高色深程序会黑屏,具体原因可以参考“[url]http://bbs.bccn.net/viewthread.php?tid=150119&highlight=%2BRockCarry[/url]”。
效果如图1.1:
 
图片附件: 游客没有浏览图片的权限,请 登录注册

图1.1 实现320X200 - 256色(8位色深)效果图

如果你按任意键,此程序将结束。并跳出了一个很不成比列输入符,天这也太不优美啦。因为此时DOS系统还处在320X200 - 256色(8位色深)模式。我们多做个模块,纪录初始化图形之前的模式并在程序结束时返回原来的模式。

代码:
INT16 GetSVGAMode();            /* 获取当前模式        */
INT16 GetSVGAMode()
{
    _AX = 0x4f03;
    __int__(0x10);

    return _BX;
}

看,简单吧?还是不懂?没关系,老办法记住就可以。您可以参考chap01-main2的实例。这里就不展示其效果图啦。
仔细对比main1与main2的效果。main1退出后字符变的很粗大,那是因为DOS系统被设置为320X200 - 256色(8位色深)模式啦,所以他的字符样式也变了,而main2却又重新将DOS系统设置回原来的模式,所以他的字符样式就很协调。
到此,如何实现图形初始化就介绍完毕。简单吧,代码就那么几行废话到不少。不过就总那么个黑乎乎的屏也没什么意思啊。下一章我们就要给你点颜色瞧瞧。


配套资料下载:[url]http://bbs.bccn.net/attachment.php?aid=32175[/url]

[[italic] 本帖最后由 jig 于 2008-1-21 17:04 编辑 [/italic]]
搜索更多相关主题的帖子: 图形 编写 孙靖 开发 机器 
2008-01-21 13:39
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
支持一下我现在只会320*200的
期待下一章谢谢
2008-01-21 14:02
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
支持楼主!

资料下载不了

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-01-21 20:10
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
你要登陆了再下

个人网站 -  http://.h001.
2008-01-21 22:11
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
加油写,写完了给我整理发0101部落去
2008-01-22 14:25
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
收藏
得分:0 
终于又有这么入门级的技术帖了:)顶啊顶

简单的快乐着~
2008-01-22 22:20
sunyboy1983
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-2-23
收藏
得分:0 
好东东[bc04]
2008-03-01 10:26
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我也来顶...
2008-03-01 19:39
谢谆本
Rank: 2
来 自:湖南娄底
等 级:论坛游民
帖 子:55
专家分:49
注 册:2010-6-21
收藏
得分:0 
虽然不怎么懂~还是顶起~~~
2010-06-25 13:51
KAKAXI666
Rank: 1
来 自:上海
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-3-17
收藏
得分:0 
有那么点意思。。。。

坚持中。。。。
2011-03-17 14:55
快速回复:[原创]如何编写自己的图形开发包 — 第一章 实现图形初始化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029649 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved