C语言教程:c语言绘图的笔记
使用图形函数
1.必须包含头文件<graphics.h>
2.保证系统能找到显示图形驱动程序*.BGI
3.将TC集成开发环境Options菜单中Linker项中的Graphics Lib选为on
只有做完这三步才能保证正确编译图形应用程序
屏幕颜色的设置
设置当前背景色:void far setbkcolor(int color);
设置当前作图色:void far setcolor(int color);
对于EGA或者VGA显示适配器,有关颜色的符号常数及数值如下:
BLACK 0 黑色
BLUE 1 蓝色
GREEN 2 绿色
CYAN 3 青色
RED 4 红色
MAGENTA 5 洋红
BROWN 6 棕色
LIGHTGRAY 7 淡灰
DARKGRAY 8 深灰
LIGHTBLUE 9 深蓝
LIGHTGREEN 10 淡绿
LIGHTCYAN 11 淡青
LIGHTRED 12 淡红
LIGHTMAGENTA 13 淡洋红
YELLOW 14 黄色
WHITE 15 白色
如果不设定颜色,则默认的北京颜色是0,也就是黑色背景;默认的画笔颜色是15,也就是白色另外还有几个获取现行颜色设置情况的函数:
int far getbkcolor(void);
int far getcolor(void);
int far getmaxcolor(void);
直接对点进行处理的函数:
int far getpixel(int x, int y);/*取得点(x,y)的颜色
void far putpixel(int x, int y, int pixelcolor);/*在(x,y)处画一个指定颜色的点
坐标和画笔:
图形模式屏幕的左上角是坐标原点(0,0),水平方向向右是X轴,垂直方向向下为Y轴。因为图形显示器和显示模式不同,X、Y坐标的最大值不同。两个函数可以取得这两个最大值:
int far getmaxx(void);
int far getmaxy(void);
这两个函数在自动检测分辨率时非常有用。
int far getx(void);/*返回画笔在x轴的位置
int far gety(void);/*返回画笔在y轴的位置
int far moveto(int x, int y);/*移动画笔到x,y所在的位置,不在屏幕上留下痕迹。
int far moverel(int dx, int dy);/*从当前画笔位置(x,y)移动到(x+dx,y+dy)去。属于相对当前点的移动。
void far linerel(int dx, int dy);/*画线函数
TC中的画线函数
void far line(int x0, int y0, int x1, int y1);
void far lineto(int x, int y);
void far linerel(int dx, int dy);
void far circle(int x, int y, int radius);
void far arc(int x, int y, int stangle, int endangle, int radius);
/*以(x,y)为圆心,radius为半径,从stangle到endange结束(用度表示)画一段圆弧线。在Turbo C中规定x轴正向为0度,逆时针方向旋转一周,依次为90,180,270和360度。
void ellipse(int x, int y,int stangle, int endangle, int xradius, int yradius);/*椭圆线,stangle=0,endangle=360时为一个完整的椭圆
void far rectangle(int x1, int y1, int x2, int y2);
void far drawpoly(int numpoints, int far *polypoints);
TC中的线形设定
setlinestyle()函数用于设定线形
getlinessetings()函数用于读出当前线形
void far setlinestyle(int linestyle, unsigned upattern, int thickness);
线的形状
SOLID_LINE 0 实线
DOTTED_LINE 1 点线
CENTER_LINE 2 中心线
DASHED_LINE 3 点画线
USERBIT_LINE 4 用户定义线
线的宽度(仅两种)
NORM_WIDTH 1 一点宽
THICK_WIDTH 3 三点宽
void far getlinessetings(struct linesettingstype far *lineinfo);
struct linesettingstype
{int linestyle;
unsigned upattern;
int thickness;
}
下面两句代码可以读出当前线的特性
struct linesettingstype *info;
getlinesettings(info);
另外还有一个对画线特性的规定:
void far setwritemode(int mode);
如果mode=0,则表示画线时将所画位置的原图形覆盖(默认方式),如果mode=1,则表示画线时用现在特性的线与原有的线进行异或操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变时,进行两次画线操作相当于画一次线然后擦除。如果用mode=1进行重画并不影响背景图像。也就是说,假如做一个动画,背景是静止的,前景是运动的,那我么只要不断对前景进行异或,前景就会不断变化而不影响背景。
填充和填充模式
1先画轮廓再填充
void far bar(int x1, int y1, int x2, int y2);
void far bar3d(int x1, int y1, int x2, int y2, int depth, int topflag);
void far pieslice(int x, int y, int stangle, int endangle, int radius);
void far sector(int x, int y, int stangle, int xradius, int yradius);
2规定填充模式
向封闭区域内填充有12种模式。
void far setfillstyle(int pattern, int color);
名字 值 意义
EMPTY_FILL 0 以背景颜色填充
SOLID_FILL 1 以实线填充
LINE_FILL 2 以直线--填充
LTSLASH_FILL 3 以斜线///填充(阴影线)
SLASH_FILL 4 以粗斜线填充(粗阴影线)
BKSLASH_FILL 5 以粗反斜线填充(阴影线)
LTBKSLASH_FILL 6 以反斜线填充(阴影线)
HATCH_FILL 7 以菱形填充
XHATCH_FILL 8 以交叉断菱形填充
INTTERLEAVE_FILL 9 以中断线填充
WIDE_DOT_FILL 10 以稀疏点填充
CLOSE_DOT_FILL 11 以密集点填充
USER_FILL 12 以用户定义式样填充
void far setfillpattern(char *upattern, int color);
其中upattern是一个指向8个字节的指针。这8个字节定义了8*8点阵的图形。每个字节的8位二进制数表示水平8个点,8个字节共表示8行,然后依次为模型向整个封闭区域填充
void far getfillpattern(char *upattern);
该函数将用户自定义的填充花样存入upattern指针指向的内存区域
void far getfillsetings(struct fillsettingstype far *fillinfo);
struct fillsettingstype
{int pattern;
int color;
}
3淹没式填充
void far floodfill(int x, int y, int border);
注意两点:
(1),种子的位置一定要在封闭区域之内
(2),floodfill函数的第三个参数边框颜色一定要写对
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |