DOS下的图形编程

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吧。


 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微型16/32位嵌入式GUI,自主开发,历时四年左右,拥有全部版权. http://www.ecgui.com 体积小巧 大小在 100KB~180KB! 特性: 多窗口支持| 完全中文输入/显示| 多数常用GUI控件| 99.9% ANSI C 编写| 已成功移植 DOS,Linux,uc/OS-II| 组件式 API(易用,高效) GUI SDK-Green for DOS Beta 开发包下载 305 KB 火热下载中 http://ecurb2006.googlepages.com/sdk-green-4dos.zip 演示程序下载 264 KB http://ecurb2006.googlepages.com/demo.zip 微型嵌入式GUI编程指南 PDF 下载 349 KB http://ecurb2006.googlepages.com/embeddedguiprogrammingguide.pdf GUI SDK For Windows Beta 开发包下载 583 KB http://ecurb2006.googlepages.com/sdk4win.zip 包含详细使用说明 部分应用程序 截图 记事本 http://ecurb2006.googlepages.com/edit.jpg 计算器 http://ecurb2006.googlepages.com/calc.jpg 画笔 http://ecurb2006.googlepages.com/painter.zip 支持控件 MAINWINDOW 主窗口 DLGWINDOW 对话框窗口,从属于主窗 BUTTON 按钮 MAINMENU 下拉式菜单 POPMENU 弹出式菜单 HSCROLLBAR 横向滚动条 VSCROLLBAR 竖向滚动条 TEXTBOX 单行文本编辑框 EDITBOX 多行文本编辑框 COMBOBOX 组合框 LISTBOX 列表框 CHECKBOX 多项选择框 CHOICEBOX 单项选择框 LABEL 文字标签 PAGEVIEW 标签页 SPEEDBAR 进度条 商业使用,将提供 GUI 全部源代码,低价授权策略,并提供 GUI 移植技术支持! 请联系 [email protected] 更多信息请访问 http://www.ecurb2006.com 针对 不少网友开发免费 DOS 软件的想法,现在提供 DOS 下的开发库,个人或者组织可以开发公共使用的免费软件,借这个机会,也希望能更好的推广这个 GUI.会在程序显示区域头部显示 GUI 的介绍性信息(无其他无关信息)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值