[DOS]图形编程-图形模式初始化

本文介绍了在DOS环境下进行图形编程的方法,包括使用TC3.0++开发环境,设置图形库,以及如何处理图形模式初始化。讨论了未链接和链接显示驱动程序时的不同处理方式,强调了正确指定驱动文件路径的重要性,并提供了错误处理和解决策略。
 
在DOS下进行图形编程
1           首先是开发环境。使用完整版的TC3.0++,可以在 这里下载。该版本包括完整的在线帮助文件,所有的文档资料。
3           重要的是要设置好编译环境参数。即选中菜单options>linker中的graphics libaray,将graphics.lib(29KB)包括进去。这个是系统自带的。如果将显示驱动程序EGAVGA.BGI链接进去,这个文件大小增加到33KB,使用链接了驱动程序后的图形库文件,生成的EXE文件可以单独运行,在后面详细解释。
4           根据链接的图形库文件不同,程序编写以及运行生成的EXE文件方式略有不同。
4.1          用没链接显示驱动程序的图形库文件。需要注意指定显示驱动文件EGAVGA.BGI的路径。如果程序在指定的路径为空或者错误,程序会在TC.EXE文件所在路径寻找,仍找不到就会报错,称指定的文件无法找到。初学者通常都会遇到这个问题而束手无策,程序编译ok了,运行时总是报错。因为TC3.0++默认的将EGAVGA.BGI文件存放在“..//BGI”目录下,而一般的图形编程例子,包括TC自带的例子中,指定的显示驱动文件路径通常为“”。注意这里的“..”指TC的安装路径。而且要采用双反斜杠,前面的反斜杠为转义字符。知道原因后,问题就简单了。将正确的路径填写进去,再运行一下你的例子,看看问题是不是解决了。下面是图形编程的一个简单的例子,摘自TC的帮助文档,红色文字部分是需要特别注意的。
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;
 
   /* initialize graphics mode */
   initgraph(&gdriver, &gmode, "..//BGI");// 图形模式初始化
//原来的语句是 initgraph(&gdriver, &gmode, "");
 
   /* read result of initialization */
   errorcode = graphresult();//返回初始化结果
 
   if (errorcode != grOk) /* an error occurred */
   {
      printf("Graphics error: %s/n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);             /* return with error code */
   }
 
   /* draw a line */
   line(0, 0, getmaxx(), getmaxy());//在屏幕上从左上角到右下角画斜线
 
   /* clean up */
   getch();
   closegraph();//退出图形模式
   return 0;
}
同样的,所指定的文件路径也是TRIP.CHR等字体文件的路径。如果该路径指定错误,也会出现TRIP.CHR文件找不到的错误。生成EXE文件后,要脱离TC开发环境运行,需要把所有用到的显示驱动文件以及字体文件复制到EXE文件所在路径。
4.2          用链接了显示驱动程序的图形库文件。
4.2.1          链接显示驱动程序方法如下:进入DOS系统或者用WINXP下面的cmd控制台。如下图输入命令用../BGI路径下的BGIOBJ.EXE将EGAVGA.BGI转化为EGAVGA.OBJ链接文件
然后用../BIN下面的TLIB.EXE将EGAVGA.OBJ链接到GRAPHICS.LIB库文件。
新的图形库文件有33KB。
调用方法:需要在初始化前用registerbgidriver()函数注册链接的显示驱动程序。如下:
… //前面的语句
   /* initialize graphics mode */
   registerbgidriver(EGAVGA_driver);// 必须添加这一句
  initgraph(&gdriver, &gmode, " ");
     …//后面的语句
生成的EXE文件,可以脱离TC开发环境运行,不需要EGAVGA.BGI文件,因为该文件已经包含在生成的EXE文件中了。
4.2.2       如果还要链接字体文件*.CHR,即链接多个驱动和字体文件后,可能会出现链接的错误 Segment exceeds 64K (or a similar error),正确的链接方法和调用方法都与链接单个显示驱动文件不同。
A.     首先,在生成 obj文件时,用参数/F 。即采用下面命令
>bgiobj /f egavga。
生成的obj文件为EGAVGAF.OBJ。然后链接到原来的graphics.lib。
B.     其次,调用时函数不同。如注册显示驱动文件
registerfarbgidriver(EGAVGA_driver_far);
注册TRIP.CHR字体文件
registerfarbgifont(triplex_font_far);
注册LITT.CHR字体文件
registerfarbgifont(little_font_far);
注册SANS.CHR字体文件
registerfarbgifont(sansseritf_font_far);
注册GOTH.CHR字体文件
registerfarbgifont(gothic_font_far);
 
总结:一般情况下,所用显示驱动文件单一,字体也只用默认的,那么推荐采用第二种方法,生成新的库函数后,以后就一劳永逸了。但是这种方法存在很大局限性,所能支持的字体只有 TRIP.CHR,LITT.CHR,SANS.CHR,GOTH.CHR四种。
第一种方法所支持的字体没有限制。也特别适合初学者。因为标准的 TC中graphics.lib库函数都是没有加载驱动和字体文件的。只是要注意生成EXE文件脱离TC开发环境运行时,一定要把所用到的显示和字体驱动文件一起拷贝到EXE文件所在文件夹中。
最后,给出两个扩展的图形库文件。
1 链接了EGAVGA.BGI的文件,点 这里下载
2 支持的四种字体文件的库函数,点 这里下载
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值