首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  图像/多媒体  |  图形编程   


DOS下的图形编程


原作者:吴吉庆    源出处:CSDN    发布者:施昌权    发布类型:转载    发布日期:2008-11-13

  

DOS系统下图形库是BGI(Borland Graphics Interface,TurboC也是borland公司开发的),BGI包含图形库文件graphics.lib,图形头文件graphics.h(记得《计算机图形学》中的例子程序都引用了这个头文件),许多图形显示器的驱动(CGA.BGI,EGAVGA.BGI等)和一些字体驱动。在TurboC的include目录中就有这个文件,使用这个图形库就可以在黑色的dos窗口中绘图了。

16位的系统和32位的系统图形处理的方式不同,所以Tc的图形库不能用在vc中。但据说已经有了winBGIm的库,可以在VC中使用,练习dos下的图形编程。在vc下也可以使用grx库可以得到相同的效果,而且接口和graphics兼容。

很多dos下的游戏就是用这个库编写的。也有的为了获得更大的灵活性,直接写屏幕内存。
直接写屏技术在DOS下面很容易实现,调用BIOS的10h中断的00h功能即可进入视频模式,对于VGA、VESA的显示模式,显存的起始地址都是A000:0000H(是一个16位地址的段址+偏移形式)。在支持DOS程序的C编译器下面很容易实现进入视频模式,并且用一个far指针指向视频显存的首地址,然后你就可以在显存里面为所欲为了,比如画点什么的。下面引用别人写的一个例子:
 

#define MODE_VGA13H  0x13
#define MODE_TEXT       0x03

void setmode(char mode)      //设置视频模式的函数
{
    asm mov ah,0x00    //调用00h功能设置视频模式
    asm mov al,mode    //AL寄存器放欲设置的视频模式号,这里以13h视频模式为例
    asm int    0x10        //调用10h中断
}

char far * vediobuf=(char far*)0xa0000000L;    //指向显存地址的指针

void putpixel(int x,int y,int c)    //画点的函数
{
    *(vediobuf+x+320*y)=c;
}

int getpixel(int x,int y)              //取点的函数
{
    return *(vediobuf+x+320*y);
}

void main(void)
{
    int i;
    int j;

    //设置VGA13H视频模式
    setmode(MODE_VGA13H);

    //用一个二重循环画满屏幕
    for(i=0;i<20;i++)
        for(j=0;j<320;j++)
            putpixel(j,i,j);

    getch();
    //返回DOS文本模式
    setmode(MODE_TEXT);
}

上面实现了一个画点的函数和一个取点的函数,在此基础上结合一些算法很容易写出画直线、画矩形、画圆等图形函数,对于BMP位图的显示,只要了解BMP的文件结构,再根据位图中的数据画点就可以把位图显示出来了。
直接写屏的性能非常高,但在Windows中绝不会允许你这样做,如果想在windows下直接写屏,就使用directdraw吧。

  

关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号