C语言具有汇编语言的功能,便于直接控制计算机显示器等系统硬件,又能完成复杂的处理和运算,因而适合于开发图形软件。目前使用的C语言提供了丰富的图形函数,利用这些库函数可以开发出各种实用的图形系统。
在字符界面下的图形软件必须运行在图形模式下,该模式下,屏幕是由像素阵列组成,每个像素在屏幕上显示一个点,左上角的位置为(0,0),X轴坐标值从左到右递增,Y轴坐标值从上到下增加。C语言的图形处理函数包含在库文件graphics.lib中,有关的函数说明和符号常量在头文件graphics.h中定义。C语言的图形函数可以分为七类,分别是图形系统控制函数,绘图及填充函数,屏幕管理函数,图形方式下的文本输出函数,颜色控制函数,错误处理函数,状态查询函数。C语言下实现的基本图形功能包含光标显示函数,图形复制函数,图形移动函数,图形清除函数。
1 初始化图形系统
在C语言下要进入图形系统,就要设置图形工作模式,将图形系统初始化,即将当前位置,调色板,颜色等复位为系统规定的缺省值。为此必须调用库函数initgraph(),它可以根据用户的要求或自动检测与之相关联的视频适配器,选择相应的驱动程序和设置图形工作模式。该函数的原型为:void far initgraph(int far*graphdriver,int far*graphmode,char far *pathtodriver),其中graphdriver是一个整形指针,用于指定要调入的图形驱动程序,参数graphmode也是一个整形指针,用来说明用户指定的图形显示方式,参数pathtodriver说明驱动程序的路径,下面就是一个图形初始化函数。
void initg(){
int driver,mode;
int back=1;
struct linesettingstype, saveline;
driver=DETECT;
initgraph(&driver, &mode, “\\bgi”);
getlinesettings(&saveline);
setlinestyle(0,1,1);
box(0,0,639,479,15);
setlinestyle(saveline.linestyle,saveline.upattern,saveline.thickness);
setviewport(1,1,6638,478,1);
setbkcolor(back);}
2 光标显示函数
void xhairs(int x, int y)
{ int i;
for(i=x-8;i<=x+8;i++)
putpixel(i, y ,getpixel(i,y) 12)
for(i=y+8;i>=y-8;i--)
putpixel(x, i ,getpixel(x,i) 12)
return;}
getpixel()函数从指定坐标位置取得原屏幕显示像素的颜色与整数12(淡红色)异或,以保证像素的可见性,成为putpixel()函数在同一位置显示像素的指定颜色。
3 图形复制函数
void copy(int startx, int starty, int endx, int endy, int x, int y) <br> {int i,j;
int start1,start2 ,end1 ,end2;
char c;
start1=startx
endx1=startx>endx?startx:endx;
start2=starty
endy2=starty>endy?starty:endy;
for(;start1<=end1 ;start1++ ,x++)
for(i=start2 ,j=y ;i<=end2;i++ ,j++)
{c=getpixel(start1,i,0);
putpixel(x,j,c);
}}
该函数用于将屏幕上指定部分的图形复制到屏幕上的任意指定位置,由函数getpixel点取得指定区域的像素颜色C,作为putpixel的指定颜色在要复制的位置上逐点显示。
4 图形移动函数
void move(int startx, int starty, int endx, int endy, int x, int y)
{int i,j;
int start1,start2,end1 ,end2;
char c;
start1=startx
endx1=startx>endx?startx:endx;
start2=starty
endy2=starty>endy?starty:endy;
for(;start1<=end1;start1++ ,x++)
for(i=start2 ,j=y;i<=end2;i++,j++)
{c=getpixel(start1, i);
putpixel(start1,i,0);
putpixel(x,j,c);
}}
在copy函数中增加清除原图形区域语句,即增加putpixel(start1,i,0)语句,由于指定颜色为背景色(0-黑色),故消去原区域中的图形,完成了移动图形功能。
5 清除图形功能函数
void erase(int startx, int starty,int endx, int endy)
{int i,j;
int start1,start2,end1,end2;
start1=startx
endx1=startx>endx?startx:endx;
start2=starty
endy2=starty>endy?starty:endy;
for(;start1<=end1;start1++,x++)
for(i=start2,j=endy ;i<=end2;i++,j++)
{getpixel(start1, i,0);
putpixel(start1, i,0);
}}
将move函数中的putpixel(x,j,c)语句去掉,即可实现指定区域图形的清除功能。