图形下清屏在TC的graphics.h中有cleardevice();和clearviewport();两个函数,
请问两个函数有什么区别呢?
还有,如果只想重画屏幕中的一片小区域,就是只清除屏幕中的一小块域,该怎么做呢?
来了来了,这两天在渲效果图,一直没空上来,今天中午趁吃了饭有点空隙~~
有两种情况,请LZ对号入坐:
1、背景是纯色:这个很好解决,graphics.lib中有画实矩形函数bar:
void far bar(int x1, int y1, int x2, int y2);
你只要设置好相应的填充颜色模式(设置为背景色),然后用bar()函数去覆盖要擦除的区域,要擦多大范围可以通过bar()的参数决定;
2、背景是图形:这就需要将背景先保存起来,比如你要画一个移动的小球,可以先用保存区域函数:
void far getimage(int xl,int yl, int x2,int y2,void far *mapbuf);
将要画小球的地方先进行保存,再画上小球,停顿一下,要擦除小球时,将之前保存的内容用下面函数覆盖到原处:
void far putimge(int x,int,y,void * mapbuf, int op);
此时屏幕就恢复完整了。然后再保存下一个画球位置先,然后画球,停顿,覆盖……
下面给出几个能用上的函数说明:
void far setfillstyle(int pattern, int color); color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数如下表所示。
关于填充式样pattern的规定:
━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义
───────────────────────────
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_DOS_FILL 11 以密集点填充
USER_FILL 12 以用户定义式样填充
━━━━━━━━━━━━━━━━━━━━━━━━━━━
除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle() 函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。 之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。
void far setfillpattern(char * upattern,int color); 设置用户定义的填充图模的颜色以供对封闭图形填充。其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向个封闭区域填充。
void far bar(int x1, int y1, int x2, int y2); 确定一个以(x1,y1)为左上角,(x2,y2)为右下角的矩形窗口,再按规定图模和颜色填充。
说明:此函数不画出边框。