#include
int gdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver); /*建立独立图形运行程序 */
initgraph(gdriver, gmode,\bar3d(50,50,250,150,20,1); getch();
closegraph(); return 0; }
上例编译链接后产生的执行程序可独立运行。
如不初始化成EGA或CGA分辨率,而想初始化为CGA分辨率, 则只需要将上述步骤中有EGAVGA的地方用CGA代替即可。
2.3 屏幕颜色的设置和清屏函数
对于图形模式的屏幕颜色设置,同样分为背景色的设置和 景色的设置.在Turbo C中分别用下面两个函数: 设置背景色: void far setbkcolor(int color); 设置作图色: void far setcolor(int color);
其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见下表所示。
有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 11 -
━━
符号常数 数值 含义 符号常数 数值 含义
──────────────────────────────
BLACK 0 黑色 DARKGRAY 8 深灰 BLUE 1 兰色 LIGHTBLUE 9 深兰 GREEN 2 绿色 LIGHTGREEN 10 淡绿 CYAN 3 青色 LIGHTCYAN 11 淡青 RED 4 红色 LIGHTRED 12 淡红
MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红 BROWN 6 棕色 YELLOW 14 黄色 LIGHTGRAY 7 淡灰 WHITE 15 白色
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
对于CGA适配器,背景色可以为表3中16种颜色的一种,但前景色依赖于不同的调色板。共有四种调色板,每种调色板上有四种颜色可供选择。不同调色板所对应的原色见下表。
CGA调色板与颜色值表:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
调色板 颜色值
──────────────────────────────
符号常数 数值 0 1 2 3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C0 0 背景 绿 红 黄 C1 1 背景 青 洋红 白 C2 2 背景 淡绿 淡红 黄 C33 3 背景 淡青 淡洋 红白
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
清除图形屏幕内容使用清屏函数,其调用格式如下:
- 12 -
voide far cleardevice(void); 有关颜色设置、清屏函数的使用请看例8:
#include
int gdriver, gmode, i; gdriver=DETECT;
initgraph(&gdriver, &gmode, \图形初始化*/
setbkcolor(0); /*设置图形背景*/ cleardevice();
for(i=0; i<=15; i++) {
setcolor(i); /*设置不同作图色*/
circle(320, 240, 20+i*10); /*画半径不同的圆*/ delay(100); /*延迟100毫秒*/
}
for(i=0; i<=15; i++) {
setbkcolor(i); /*设置不同背景色*/ cleardevice();
circle(320, 240, 20+i*10); delay(100); }
closegraph(); return 0; }
另外,TURBO C也提供了几个获得现行颜色设置情况的函数。 int far getbkcolor(void); 返回现行背景颜色值。 int far getcolor(void); 返回现行作图颜色值。
- 13 -
int far getmaxcolor(void); 返回最高可用的颜色值。
2.4 基本画图函数
基本图形函数包括画点,线以及其它一些基本图形的函数 本节对这些函数作一全面的介绍。 1、画点
I. 画点函数 void far putpixel(int x, int y, int color); 该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。
在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。 关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。 II、有关坐标位置的函数
int far getmaxx(void);返回x轴的最大值。 int far getmaxy(void); 返回y轴的最大值。 int far getx(void); 返回游标在x轴的位置。 void far gety(void); 返回游标有y轴的位置。
- 14 -
void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。
void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。 2、画线 I. 画线函数
TURBO C提供了一系列画线函数,下面分别叙述:
void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。
void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。
void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。
void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。
void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。
在TURBO C中规定x轴正向为0 度,逆时针方向旋转一周, 依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时, 画出一个完整的椭圆。 void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。
- 15 -