image的onmove事件画线,如果消除闪烁,Image1.parent.DoubleBuffered := true会很慢(200分)

  • 主题发起人 主题发起人 HAZL
  • 开始时间 开始时间
H

HAZL

Unregistered / Unconfirmed
GUEST, unregistred user!
做一个橡皮筋矩型框,在onmove事件中擦去上一次的框,画上新框,但是用了双缓冲时在公司的机器上速度没影响,cpu:P3 1.7G,128M内存,家里的塞扬3 1G,258M内存的机器上明显变慢,好象慢动作,动画片一样。不用双缓冲又闪的历害
有没有更好的解决方法。
 
塞扬3 1G,258M内存的机器
这个机子还慢啊?
 
重新编写你的代码,应该不会的。我未用双缓冲技术,也很快呀!
 
应该不会有问题的,你看下是不是其他代码的影响。
或就提取这一段代码试下,就可以判断出是 什么问题了。
 
用XOR异或,直接可以擦除
 
这是我的测试代码,同样是画两条线,和画象皮筋框运算量差不多。
测试的图象是1024x768的位图。用双缓冲时会鼠标移动稍快一点之后,过好久(有点象慢动作)才慢慢画线 过来。不用双缓冲又闪的历害,没法看,我现在不知是我机器的问题还是程序的问题,按道理程序没什么呀 ,就画两条线,这运算量不大呀。
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
image1. Picture. Bitmap. Canvas. MoveTo(0,0);
image1. Picture. Bitmap. Canvas. LineTo(x,y);
image1. Picture. Bitmap. Canvas. MoveTo(0,0);
image1. Picture. Bitmap. Canvas. LineTo(X,Y);
end;
 
还有一个奇怪的现象,有两张图片,都是jpg格式调入,转换成位图然后画象皮筋框。
其中一图是我自已的照片,711*1026 24位,248K,另一图是拳王2002带的图片,1024*768 24位,230K左右。
在画我的照片时没有问题一切正常,同样的代码,换成拳王的图片就慢了。这是为什么呢?
 
你这么大的图干麻还偷懒用双缓冲?这么做系统的消耗当然是大得惊人。
你应该按“爱元元的哥哥”所说,自已处理缓冲问题。
 
我要是会自已处理缓冲我就不来问了,我试着在内存里建了一个位图,在上面画了,然后再bitblt前面的Timage里,没用,不开双缓冲还是个闪。因为我要做的是象皮筋线,就是mouse指到哪儿,线条跟着画到哪儿。所以动一下就要更新一下,哪位有好方法?
 
把代码发到yuan-fan@21cn.com,我来改着试试。
 
设置image1.stretch := true;
 
不拉伸,拉了就变型了。
代码很简单,就是建一个Tbitmap,把包含线的矩形画到这个bitmap上,然后再bilbit到原TIMAGE。PICTURE。BITMAP。CANVES的对应位置.原代码在另一台机上,哪台机不能上网.公司的破规定.妈的
 
我刚才看了一下vcl处理双缓冲的代码。照着扒了一个,也不管用,可能哪里没搞好。再试吧
 
多人接受答案了。
 
后退
顶部