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

一、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库了,因为库已经在你的程序里面了。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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 移植技术支持! 请联系 sales@ecurb2006.com 更多信息请访问 http://www.ecurb2006.com 针对 不少网友开发免费 DOS 软件的想法,现在提供 DOS 下的开发,个人或者组织可以开发公共使用的免费软件,借这个机会,也希望能更好的推广这个 GUI.会在程序显示区域头部显示 GUI 的介绍性信息(无其他无关信息)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值