如何使得绘制填充区域改变的图形达到画笔中绘制填充图形的效果? (100分)

  • 主题发起人 主题发起人 陈晨
  • 开始时间 开始时间

陈晨

Unregistered / Unconfirmed
GUEST, unregistred user!
例如绘制一个填充矩形,设双缓冲后仍然有明显的闪烁,请问如何解决,
如何达到画图程序的效果呢?
 
绘制不要太频繁,必要时才绘。
看你在哪个事件中实现
 
在paintbox的mousemove中绘制
 
锁定画布
 
to:zhu_jy
能不能详细点?,我试过我是画了矩形再清除再画,类似橡皮筋的直线的方法。
必须要清除的,多于部分。锁定不太可行,
 
重画的方法比较麻烦,代码也不好写,一般应该是用异或吧.又一个最好的办法,放一个
shape在picture,visible:=false,在formcreate中加: Shape1.Brush.Style:=bsClear;
这样shape中间就透明了。知道怎么做了吗?mousedown就纪录起始点,mousemove就计算
矩形大小并显示,mouseup就隐藏shape,并真正画图,由于picture不是容器,所以必须
考虑mousemove的范围,可以吧picture,shape放在panel中,还有,shape是可以画圆
椭圆等好多图形的。
以前我是在PDA上面坐这个程序的,更加麻烦。记得里面也是有填充工具的,WINDOWS里面
可以简单调用FLOODFILL API,CE不支持这个api,所以只好自己坐拉,思想很简单,一个点
周围有九个点,用第归算法可以简单实现,但是由于第归会大量占用CE少的可怜的内存,所以
经常会内存不够而中断,速度也慢,所以自己构建堆栈或动态数组压点数据吧。
 
那位大虾还有其它的方法。如果没有结账了
 
在MouseMove中重绘是最有问题的了,不过你可以根据鼠标移动时候所需要涉及的重绘的范
围内重绘, 可以用MemBitmap方式重绘, 即,需要重绘的时候,将画布句柄转移到MEMBITMP
重绘完成以后将membitmap中内容拷贝到画布上,闪烁问题就不会出现, 但重绘不能太频繁。
 
to:suny 但重绘不能太频繁 这句话,呵呵呵,谢谢你,我试一试
 

Similar threads

I
回复
0
查看
625
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部