📄 图形涵数.htm
字号:
其调用格式如下: <BR> void far
floodfill(int x, int y, int border); <BR> 其中: x,
y为封闭图形内的任意一点。border为边界的颜色, 也就是封闭图 <BR>形轮廓的颜色。调用了该函数后, 将用规定的颜色和图模填满整个封闭图形。
<BR> 注意: <BR> 1. 如果x或y取在边界上, 则不进行填充。
<BR> 2. 如果不是封闭图形则填充会从没有封闭的地方溢出去, 填满其它地方。
<BR> 3. 如果x或y在图形外面, 则填充封闭图形外的屏幕区域。 <BR> 4.
由border指定的颜色值必须与图形轮廓的颜色值相同, 但填充色可选任 <BR>意颜色。下例是有关floodfill()函数的用法,
该程序填充了bar3d()所画长方体 <BR>中其它两个未填充的面。 <BR> 例12:
<BR> #include<stdlib.h>
<BR> #include<graphics.h>
<BR> main() <BR> {
<BR> int gdriver, gmode;
<BR> strct
fillsettingstype save;
<BR> gdriver=DETECT;
<BR>
initgraph(&gdriver, &gmode, "");
<BR> setbkcolor(BLUE);
<BR> cleardevice();
<BR> setcolor(LIGHTRED);
<BR> setlinestyle(0,0,3);
<BR>
setfillstyle(1,14);
/*设置填充方式*/ <BR>
bar3d(100,200,400,350,200,1); /*画长方体并填充*/
<BR>
floodfill(450,300,LIGHTRED); /*填充长方体另外两个面*/
<BR> floodfill(250,150,
LIGHTRED); <BR>
rectanle(450,400,500,450); /*画一矩形*/
<BR> floodfill(470,420,
LIGHTRED); /*填充矩形*/ <BR>
getch(); <BR>
closegraph(); <BR> }
<P> 6. 有关图形窗口和图形屏幕操作函数
<P> 一、图形窗口操作 <BR> 象文本方式下可以设定屏幕窗口一样,
图形方式下也可以在屏幕上某一区域 <BR>设定窗口, 只是设定的为图形窗口而已, 其后的有关图形操作都将以这个窗口的 <BR>左上角(0,0)作为坐标原点,
而且可为通过设置使窗口之外的区域为不可接触。 <BR>这样, 所有的图形操作就被限定在窗口内进行。 <BR> void
far setviewport(int xl,int yl,int x2, int y2,int clipflag);
<BR> 设定一个以(xl,yl)象元点为左上角, (x2,y2)象元为右下角的图形窗口, 其
<BR>中x1,y1,x2,y2是相对于整个屏幕的坐标。若clipflag为非0, 则设定的图形以外 <BR>部分不可接触, 若clipflag为0,
则图形窗口以外可以接触。 <BR> void far clearviewport(void);
<BR> 清除现行图形窗口的内容。 <BR> void far
getviewsettings(struct viewporttype far * viewport); <BR>
获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport <BR>中, 其中viewporttype的结构说明如下:
<BR> struct viewporttype{
<BR> int left,
top, right, bottom;
<BR> int
cliplag; <BR> };
<BR> 注明: <BR> 1. 窗口颜色的设置与前面讲过的屏幕颜色设置相同,
但屏幕背景色和窗口 <BR>背景色只能是一种颜色, 如果窗口背景色改变, 整个屏幕的背景色也将改变这与 <BR>文本窗口不同。
<BR> 2. 可以在同一个屏幕上设置多个窗口, 但只能有一个现行窗口工作, 要对 <BR>其它窗口操作,
通过将定义那个窗口的setviewport()函数再用一次即可。 <BR> 3.
前面讲过图形屏幕操作的函数均适合于对窗口的操作。
<P> 二、屏幕操作 <BR> 除了清屏函数以外, 关于屏幕操作还有以下函数:
<BR> void far setactivepage(int pagenum);
<BR> void far setvisualpage(int pagenum);
<BR> 这两个函数只用于EGA,VGA 以及HERCULES图形适配器。setctivepage() 函数
<BR>是为图形输出选择激活页。 所谓激活页是指后续图形的输出被写到函数选定的 <BR>pagenum页面,
该页面并不一定可见。setvisualpage()函数才使pagenum 所指定 <BR>的页面变成可见页。页面从0开始(Turbo
C默认页)。如果先用setactivepage() <BR>函数在不同页面上画出一幅幅图像,再用setvisualpage()函数交替显示, 就可以
<BR>实现一些动画的效果。 <BR> void far getimage(int xl,int yl, int
x2,int y2, void far *mapbuf); <BR> void far putimge(int
x,int,y,void * mapbuf, int op); <BR> unsined far
imagesize(int xl,int yl,int x2,int y2); <BR>
这三个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到 <BR>屏幕上。首先通过函数imagesize()测试要保存左上角为(xl,yl),
右上角为(x2, <BR>y2)的图形屏幕区域内的全部内容需多少个字节, 然后再给mapbuf 分配一个所测
<BR>数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在 <BR>内存中,
需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上, <BR>其中getimage()函数中的参数op规定如何释放内存中图像。
<BR> 关于这个参数的定义参见表8。
<P>
表8. putimage()函数中的op值 <BR> ━━━━━━━━━━━━━━━━━━━━━━━━━━
<BR>
符号常数 数值
含 义 <BR> ──────────────────────────
<BR>
COPY_PUT
0 复制
<BR>
XOR_PUT
1 与屏幕图像异或的复制
<BR>
OR_PUT
2 与屏幕图像或后复制
<BR>
AND_PUT
3 与屏幕图像与后复制
<BR>
NOT_PUT
4 复制反像的图形 <BR>
━━━━━━━━━━━━━━━━━━━━━━━━━━
<P> 对于imagesize()函数, 只能返回字节数小于64K字节的图像区域, 否则将会 <BR>出错,
出错时返回-1。 <BR> 本节介绍的函数在图像动画处理、菜单设计技巧中非常有用。
<P> 例13: 下面程序模拟两个小球动态碰撞过程。 <BR>
#include<stdio.h> <BR> #include<graphics.h>
<BR> int main() <BR> {
<BR> int i, gdriver,
gmode, size; <BR> void
*buf; <BR> gdriver=DETECT;
<BR>
initgraph(&gdriver, &gmode, "");
<BR> setbkcolor(BLUE);
<BR> cleardevice();
<BR> setcolor(LIGHTRED);
<BR> setlinestyle(0,0,1);
<BR> setfillstyle(1, 10);
<BR> circle(100, 200, 30);
<BR> floodfill(100, 200,
12); <BR>
size=imagesize(69, 169, 131, 231);
<BR> buf=malloc(size);
<BR> getimage(69, 169,
131, 231,buf); <BR>
putimage(500, 269, buf, COPY_PUT);
<BR> for(i=0; i<185;
i++){
<BR>
putimage(70+i, 170, buf, COPY_PUT);
<BR>
putimage(500-i, 170, buf, COPY_PUT);
<BR> }
<BR> for(i=0;i<185;
i++){
<BR>
putimage(255-i, 170, buf, COPY_PUT);
<BR>
putimage(315+i, 170, buf, COPY_PUT);
<BR> }
<BR> getch();
<BR> closegraph();
<BR> }
<P> 7. 图形模式下的文本输出
<P> 在图形模式下, 只能用标准输出函数, 如printf(), puts(), putchar() 函
<BR>数输出文本到屏幕。除此之外, 其它输出函数(如窗口输出函数)不能使用, 即是 <BR>可以输出的标准函数, 也只以前景色为白色, 按80列,
25行的文本方式输出。 <BR> Turbo C2.0也提供了一些专门用于在图形显示模式下的文本输出函数。下面
<BR>将分别进行介绍。 <BR> 一、文本输出函数 <BR> void
far outtext(char far *textstring); <BR>
该函数输出字符串指针textstring所指的文本在现行位置。 <BR> void far
outtextxy(int x, int y, char far *textstring); <BR>
该函数输出字符串指针textstring所指的文本在规定的(x, y)位置。 其中x <BR>和y为象元坐标。 <BR>
说明: <BR> 这两个函数都是输出字符串, 但经常会遇到输出数值或其它类型的数据,
<BR>此时就必须使用格式化输出函数sprintf()。 <BR> sprintf()函数的调用格式为:
<BR> int sprintf(char *str, char *format,
variable-list); <BR> 它与printf()函数不同之处是将按格式化规定的内容写入str 指向的字符串
<BR>中, 返回值等于写入的字符个数。 <BR> 例如:
<BR> sprintf(s, "your TOEFL score is %d",
mark); <BR> 这里s应是字符串指针或数组, mark为整型变量。
<P> 二、有关文本字体、字型和输出方式的设置 <BR> 有关图形方式下的文本输出函数,
可以通过setcolor()函数设置输出文本的 <BR>颜色。另外, 也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输 <BR>出。
<P> void far settexjustify(int horiz, int vert);
<BR> 该函数用于定位输出字符串。 <BR> 对使用outtextxy(int x,
int y, char
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -