学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
轻松建立自己的群组,招兵买马   
发新话题
打印

关于TC图形下的清屏

关于TC图形下的清屏

图形下清屏在TC的graphics.h中有cleardevice();和clearviewport();两个函数,
请问两个函数有什么区别呢?

还有,如果只想重画屏幕中的一片小区域,就是只清除屏幕中的一小块域,该怎么做呢?

TOP

这里人气好像不怎么好啊~
兴趣是我的源动力!

TOP


因为是才开不久的版面,所以人气是有点低。
不好意思,我的专长是OpenGL,在图形专区负责OpenGL的问题,因为我没用过TC,所以你的问题我没法回答,不过一笔苍穹是这方面的高手,今天他没上线,我想等明天他上线了一定会给你一个满意的解答的。

[此贴子已经被作者于2006-7-3 21:45:07编辑过]

我的征途是星辰大海

TOP

不管怎么样先谢了,看来还是热心人多~

兴趣是我的源动力!

TOP

来了来了,这两天在渲效果图,一直没空上来,今天中午趁吃了饭有点空隙~~

有两种情况,请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);
此时屏幕就恢复完整了。然后再保存下一个画球位置先,然后画球,停顿,覆盖……

TOP

下面给出几个能用上的函数说明:

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)为右下角的矩形窗口,再按规定图模和颜色填充。
说明:此函数不画出边框。

TOP

再问一下
void far putimge(int x,int,y,void * mapbuf, int op);这个函数中op这个参数,我还是不太了解!

我知道对op取值为以下5个数值:
COPY_PUT 完全拷贝
XOR_PUT 与现在的屏幕图象异或拷贝
OR_PUT 与现在的屏幕图象相或拷贝
AND_PUT 与现在的屏幕图象相与拷贝
NOT_PUT 取反拷贝到屏幕上

能对这些参数说明一下吗?

兴趣是我的源动力!

TOP

回楼上,建议,你自己对op值做全面的实验,一下就弄明白了......

www.ds0101.net

TOP

我就说一下原理吧:这些标志就是告诉函数将你要绘制的东西与屏幕上的点做按位运算,并用运算结果代替mapbuf中的内容显示在屏幕上。
默认情况下是用COPY_PUT即不进行按位运算操作完全拷贝。
当比如说当你用到XOR_PUT标志时,putimage()函数在显示图片时将图片中的每个像素与屏幕上原有的像素的颜色值进行异或(^)运算后,将结果显示在屏幕上。这个说起来不直观,如楼上所说你可以写一段代码试试他们各自的作用就知道了。

TOP

发新话题