📄 图形处理.htm
字号:
i++)<BR>{<BR>setcolor(i);
/*设置不同作图色*/<BR>circle(320, 240, 20+i*10);
/*画半径不同的圆*/<BR>delay(100);
/*延迟100毫秒*/<BR>}<BR>for(i=0; i<=15;
i++)<BR>{<BR>setbkcolor(i);
/*设置不同背景色*/<BR>cleardevice();<BR>circle(320, 240,
20+i*10);<BR>delay(100);<BR>}<BR>closegraph();<BR>return
0;<BR>}<BR> 另外,TURBO
C也提供了几个获得现行颜色设置情况的函数。<BR> int far
getbkcolor(void); 返回现行背景颜色值。<BR> int far
getcolor(void); 返回现行作图颜色值。<BR> int far
getmaxcolor(void);
返回最高可用的颜色值。<BR>基本图形函数<BR> 基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。<BR>一、画点<BR> 1.
画点函数 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)的颜色值。<BR> 2.
有关坐标位置的函数<BR> int far getmaxx(void);
返回x轴的最大值。<BR> int far getmaxy(void); 返回y轴的最大值。
<BR> int far getx(void); 返回游标在x轴的位置。<BR> void far
gety(void); 返回游标有y轴的位置。<BR> void far moveto(int x,
int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。 <BR> void far
moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx,
y+dy)的位置,移动过程中不画点。<BR>二、画线<BR> 1. 画线函数<BR> TURBO
C提供了一系列画线函数,下面分别叙述:<BR> void far line(int x0, int
y0, int x1, int y1); 画一条从点(x0, y0)到(x1,
y1)的直线。<BR> void far lineto(int x, int y);
画一作从现行游标到点(x, y)的直线。 <BR> void far linerel(int dx,
int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx,
y+dy)的直线。<BR> void far circle(int x, int y, int
radius); 以(x, y)为圆心,radius为半径,画一个圆。<BR> void far
arc(int x, int y, int stangle, int endangle,int
radius);
以(x,y)为圆心,radius为半径,从stangle开始到endangle结束<BR>(用度表示)画一段圆弧线。在TURBO
C中规定x轴正向为0 度,逆时针方向旋转一周, 依次为90,180,
270和360度(其它有关函数也按此规定不再重述)。 <BR> void ellipse(int
x, int y, int stangle, int endangle,int
xradius,int yradius);以(x,
y)为中心,xradius,yradius为x轴和y轴半<BR>径,从角stangle
开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时,
画出一个完整的椭圆。 <BR> void far rectangle(int x1, int y1,
int x2, inty2); 以(x1, y1)为左上角,(x2,
y2)为右下角画一个矩形框。<BR> void far drawpoly(int
numpoints, int far *polypoints);
画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。 polypoints整型数组必须至少有2
倍顶点数个无素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形时,numpoints
的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。<BR> 下面举一个用drawpoly()函数画箭头的例子。#include<STDLIB.H><BR>#include<GRAPHICS.H><BR>int
main()<BR>{<BR>int gdriver, gmode, i; <BR>int
arw[16]={200,102,300,102,300,107,330,<BR>100,300,93,300,98,200,98,200,102};<BR>gdriver=DETECT;<BR>initgraph(&gdriver,
&gmode,
"c:\\caic\\bgi");<BR>setbkcolor(BLUE);<BR>cleardevice();<BR>setcolor(12);
/*设置作图颜色*/<BR>drawpoly(8, arw);
/*画一箭头*/<BR>getch();<BR>closegraph();<BR>return
0;<BR>}<BR>设定线型函数<BR> 在没有对线的特性进行设定之前,TURBO C
用其默认值,即一点宽的实线,但TURBO C
也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。<BR>void
far setlinestyle(intlinestyle,unsigned
upattern,int thickness);
该函数用来设置线的有关信息,其中linestyle是线形状的规定,<BR>见下表:<BR>有关线的形状(linestyle)<BR>━━━━━━━━━━━━━━━━━━━━━━━━━<BR>符号常数
数值 含义<BR>─────────────────────────<BR>SOLID_LINE 0
实线<BR>DOTTED_LINE 1 点线<BR>CENTER_LINE 2
中心线<BR>DASHED_LINE 3 点画线<BR>USERBIT_LINE 4
用户定义线<BR>━━━━━━━━━━━━━━━━━━━━━━━━━
<BR>有关线宽(thickness)<BR>thickness是线的宽度,见下表。<BR>━━━━━━━━━━━━━━━━━━━━━━━━━<BR>符号常数
数值 含义<BR>─────────────────────────<BR>NORM_WIDTH 1
一点宽<BR>THIC_WIDTH 3
三点宽<BR>━━━━━━━━━━━━━━━━━━━━━━━━━
<BR> 对于upattern,只有linestyle选USERBIT_LINE 时才有意义
(选其它线型,uppattern取0即可)。此进uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。
void far getlinesettings(struct
linesettingstypefar
*lineinfo);该函数将有关线的信息存放到由lineinfo
指向的结构中,表中linesettingstype的结构如下:<BR> struct
linesettingstype<BR> {<BR> int
linestyle;<BR> unsigned upattern;<BR> int
thickness;<BR> }<BR> 例如下面两句程序可以读出当前线的特性 struct
linesettingstype *info;getlinesettings(info);void
far setwritemode(int mode);
该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO
C的默认方式)。如果mode=1,
则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,
实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。<BR>有关线型设定和画线函数的例子如下所示:<BR>#include<STDLIB.H><BR>#include<GRAPHICS.H><BR>int
main()<BR>{<BR>int gdriver, gmode,
i;<BR>gdriver=DETECT;<BR>initgraph(&gdriver,
&gmode,
"c:\\caic\\bgi");<BR>setbkcolor(BLUE);<BR>cleardevice();<BR>setcolor(GREEN);<BR>circle(320,
240, 98);<BR>setlinestyle(0, 0, 3);
/*设置三点宽实线*/<BR>setcolor(2);<BR>rectangle(220, 140,
420, 340);<BR>setcolor(WHITE);<BR>setlinestyle(4,
0xaaaa, 1);<BR>/*设置一点宽用户定义线*/<BR>line(220, 240,
420, 240);<BR>line(320, 140, 320,
340);<BR>getch();<BR>closegraph();<BR>return
0;<BR>}<BR>封闭图形的填充 <BR> 填充就是用规定的颜色和图模填满一个封闭图形。
<BR>一、先画轮廓再填充<BR> TURBO C提供了一些先画出基本图形轮廓,
再按规定图模和颜色填充整个封闭图形的函数。在没有改变填充方式时,TURBO C 以默认方式填充。
下面介绍这些函数。 void far bar(int x1, int y1, int x2, int
y2); 确定一个以(x1, y1)为左上角,(x2,
y2)为右下角的矩形窗口,<BR>再按规定图模和颜色填充。<BR> 说明:此函数不画出边框,所以填充色为边框。
void far bar3d(int x1, int y1, int x2, int y2,int
depthint topflag);当topflag为非0时,
画出一个三维的长方体。当topflag为0时,三维图形不封顶,实际上很少这样使用。<BR> 说明:
bar3d()函数中,长方体第三维的方向不随任何参数而变,即始终为45度的方向。
<BR> void far pieslice(int x,int y,int
stangle,int endangle,int radius); 画一个以(x,
y)为圆心,radius为半径,stangle为起始角度,endangle
为终止角度的扇形,再按规定方式填充。当stangle=0,endangle=360
时变成一个实心圆,并在圆内从圆点沿X轴正向画一条半径。 <BR> void far
sector(int x, int y,int stanle,intendangle,int
xradius, int yradius);画一个以(x, y)为圆心分别以xradius,
yradius为x轴和y轴半径,stangle
为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。
<BR>二、设定填充方式<BR> TURBO C有四个与填充方式有关的函数。下面分别介绍:
<BR> void far setfillstyle(int pattern, int
color);
color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数如下表所示。关于填充式样pattern的规定:<BR>━━━━━━━━━━━━━━━━━━━━━━━━━━━<BR>符号常数
数值 含义<BR>───────────────────────────<BR>EMPTY_FILL
0 以背景颜色填充<BR>SOLID_FILL 1 以实填充<BR>LINE_FILL 2
以直线填充<BR>LTSLASH_FILL 3 以斜线填充(阴影线)<BR>SLASH_FILL 4
以粗斜线填充(粗阴影线)<BR>BKSLASH_FILL 5
以粗反斜线填充(粗阴影线)<BR>LTBKSLASH_FILL 6
以反斜线填充(阴影线)<BR>HATCH_FILL 7 以直方网格填充<BR>XHATCH_FILL
8 以斜网格填充<BR>INTTERLEAVE_FILL 9
以间隔点填充<BR>WIDE_DOT_FILL 10
以稀疏点填充<BR>CLOSE_DOS_FILL 11 以密集点填充<BR>USER_FILL 12
以用户定义式样填充<BR> 除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle()
函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。
之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。 void far
setfillpattern(char * upattern,int color);
设置用户定义的填充图模的颜色以供对封闭图形填充。其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向个封闭区域填充。
void far getfillpattern(char * upattern);
该函数将用户定义的填充图模存入upattern指针指向的内存区域。<BR> void far
getfillsetings(struct fillsettingstypefar *
fillinfo);
获得现行图模的颜色并将存入结构指针变量fillinfo中。<BR>其中fillsettingstype结构定义如下:
<BR>struct fillsettingstype<BR>{<BR>int pattern;
/* 现行填充模式 * /<BR>int color; /* 现行填充模式 * /<BR>};
有关图形填充图模的颜色的选择,请看下面例程。#include<GRAPHICS.H><BR>main()<BR>{<BR>char
str[8]={10,20,30,40,50,60,70,80};
/*用户定义图模*/<BR>int gdriver,gmode,i;<BR>struct
fillsettingstype
save;<BR>/*定义一个用来存储填充信息的结构变量*/<BR>gdriver=DETECT;<BR>initgraph(&gdriver,&gmode,"c:\\caic\\bgi");<BR>setbkcolor(BLUE);<BR>cleardevice();<BR>for(i=0;i<13;i++)<BR>{<BR>setcolor(i+3);<BR>setfillstyle(i,2+i);
/* 设置填充类型 *<BR>bar(100,150,200,50);
/*画矩形并填充*/<BR>bar3d(300,100,500,200,70,1); /*
画长方体并填充*/<BR>pieslice(200, 300, 90, 180,
90);/*画扇形并填充*/<BR>sector(500,300,180,270,200,100);/*画椭圆扇形并填充*/<BR>delay(1000);
/*延时1秒*/<BR>}<BR>cleardevice();<BR>setcolor(14);<BR>setfillpattern(str,
RED);<BR>bar(100,150,200,50);<BR>bar3d(300,100,500,200,70,0);<BR>pieslice(200,300,0,360,90);<BR>sector(500,300,0,360,100,50);<BR>getch();<BR>getfillsettings(&save);<BR>/*获得用户定义的填充模式信息*/<BR>closegraph();<BR>clrscr();<BR>printf("The
pattern is %d, The color of filling is
%d",<BR>save.pattern,
save.color);<BR>/*输出目前填充图模和颜色值*/<BR>getch();<BR>}<BR> 以上程序运行结束后,在屏幕上显示出现行填充图模和颜色的常数值。
<BR>三、任意封闭图形的填充<BR> 截止目前为止,我们只能对一些特定形状的封闭图形进行填充,但还不能对任意封闭图形进行填充。为此,TURBO
C 提供了一个可对任意封闭图形填充的函数,其调用格式如下: void far
floodfill(int x, int y, int border); 其中:x,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -