`
k7_1983
  • 浏览: 6412 次
  • 性别: Icon_minigender_1
  • 来自: 娄底
最近访客 更多访客>>
社区版块
存档分类

[学习DOS下的图形操作]第一天 TC中图形的初始化-

    博客分类:
  • C
阅读更多
一、Turbo C的图形库
Turbo C为我们提供了在dos下的一个功能很强的图形软件库。
这个软件库称为Borland图形接口(BGI)。[注:Turbo c 这个软件是由Borland(宝蓝)公司开发的]
这个库包括图形库文件 graphics.lib,图形头文件 graphics.h和许多的图形显示器在dos下的驱动程序。
(例如: CGA.BGI、EGAVGA.BGI等)。
另外,这个库也包括一些字符集的字体驱动程序(如goth.chr黑体字符集等)。
二、图形显示的坐标和像素
1.坐标
显示器的坐标系统定义屏幕的左上角为原点,X值向右不断增大,Y值向下不断增大。
我们把这种坐标称为屏幕显示的物理坐标或绝对坐标。
如果我们需要用到不同的坐标,可以自己写一个坐标转换函数来实现。
2.像素
屏幕上的画面,如果凑近点仔细看的话,会发现它由一些小原点组成,这些点的颜色和亮度相同或不同。
我们把这些点称为像素,它们是组成图形的最小单位。
三、图形显示器与适配器
计算机中要显示的字符和图形都用二进制数字的方式放在存储器里面,但CRT显示器接受的是模拟信号。
家用的电视和显示器有三条模拟红绿蓝颜色的模拟信号输入线,每条输入线的电压决定了颜色的亮度,只要能产生可区分的电压,它们不同的组合,便可以让显示器显示出不同的颜色来。
电脑上的图形适配器(现在我们都称之为显卡),它的作用就是将要显示的字符和图形以数字形式存储在卡上的视屏存储器VRAM中(显存中),再将其变成视屏模拟信号送给显示器进行显示。当然,现在的显卡功能越来越强大了,还在某些程度上执行CPU所进行的操作,对图像进行处理。
显然,Turbo C 不能够驱动现在的比较先进显卡,它本身带的库没有那个功能。但是现在的显卡却向前兼容,能够模拟以前那些老古董显卡的一些功能。
所以,我们在这里使用大部分显卡都能支持的VGA适配器来进行学习,学好这一种之后,其它的也就能举一反三了。
四、图形系统的初始化
所谓初始化就是要告诉计算机你要使用什么类型的显卡(也就是什么类型的适配器,一个意思,名字不同而已),采用什么模式的图形方式(老的显卡内存有显,往往有几种模式供你选择,有的模式颜色少,比如只有黑白两种颜色,有的模式颜色多,但分辨率低,只有320 * 200),在这里我列一下VGA的模式。
VGA
模式0 分辨率 640 * 200    颜色数 16 种  页数 2页 
模式1 分辨率 640 * 350    颜色数 16 种  页数 2页
模式2 分辨率 640 * 480    颜色数 16 种  页数 1页

现在的问题是,怎样把这些告诉计算机呢?
很简单,调用initgraph函数就可以了。
void initgraph( int *driver, int *mode, char *path );
看到了没有,我们只要填好了driver, mode 和图形库的路径就好了。
driver就是问你驱动是那种,在graphics.h定义了所有Turbo C中图形库所支持的驱动类型,这里我们可以定义一个整型变量,把VGA这个枚举常量赋给它就好了。
int graph_driver = VGA;  //VGA定义在graphics.h中
mode 就是上面的模式了,我们当然要选 640 * 480 的。
int graph_mode = 2;
或者
int graph_mode = VGAHI; //这个也是定义在graphics.h中的常量
最后的参数是图形库的路径,,如果你使用"",那就表示在当前目录下。

推荐使用后面一种。
接下来我们就试试,看看调用能不能成功。
一般看不出效果,所以我们加了两条语句。
一条是setbkcolor( RED );//把背景设置成红色
一条是getch();//等待用户敲入一个字符
最后还有一条closegraph();//关闭图形模式,退回到字符模式
#include <stdio.h>
#include <graphics.h>
int main(void)
{
        int graph_driver = VGA;
        int graph_mode = VGAHI;
        char *graph_path = "D:\\DOS\\TC\\BGI";//把这里改写为你所需要的目录
        //其实就是看你的CGAVGA.BGI放在哪里,如果你拷贝一份到你的.exe文件的同目录下
        //那么这里就可以为""
        initgrah( &graph_driver, &graph_mode, graph_path );
        setbkcolor( RED );
        getch();
        closegraph();
        return 0;
}

  好了,可以试试了!你会看到你的屏幕全部都是红色的,什么,你的电脑不支持VGA模式!赶紧换,换台能支持的还来得急。
什么,你用VC6.0以上的版本编译不成功!老大,这是DOS下的程序好不好,VC是32位编译器,TC是16位编译器。
而且,请注意,VC编译出来的叫做控制台应用程序,是32的,虽然也是一个黑黑的DOS界面,但是不是同样的东西。
在TC下编译的是DOS下的程序,你在windows下运行,windows会模拟dos环境运行你的程序。
不要在VC里面使用DOS下的图形操作功能,在VC下要画图就用GDI,用D3D啦!

如果出现下面的问题
BGI Error: Graphics not initialized (use 'initgraph') 错误的处理方法
Tag: BGI error
可以使用下面的解决办法:
一:把egavga.bgi和程序一同拷贝到同一个文件夹下。
二:建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):
    1. 在TC子目录下找到BGIOBJ命令,并在这个目录下执行输入命令:BGIOBJ EGAVGA
    此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
    2. 在TC子目录找到TLIB命令,并在这个目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
    此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。
    3. 在程序中initgraph()函数调用之前加上一句:
       registerbgidriver(EGAVGA_driver);
这样,程序就不需要使用egavga.bgi库了,因为库已经在你的程序里面了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics