H HAZL Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-03 #1 做一个橡皮筋矩型框,在onmove事件中擦去上一次的框,画上新框,但是用了双缓冲时在公司的机器上速度没影响,cpu3 1.7G,128M内存,家里的塞扬3 1G,258M内存的机器上明显变慢,好象慢动作,动画片一样。不用双缓冲又闪的历害 有没有更好的解决方法。
做一个橡皮筋矩型框,在onmove事件中擦去上一次的框,画上新框,但是用了双缓冲时在公司的机器上速度没影响,cpu3 1.7G,128M内存,家里的塞扬3 1G,258M内存的机器上明显变慢,好象慢动作,动画片一样。不用双缓冲又闪的历害 有没有更好的解决方法。
D dbyoung Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-04 #3 重新编写你的代码,应该不会的。我未用双缓冲技术,也很快呀!
W wtopia Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-04 #4 应该不会有问题的,你看下是不是其他代码的影响。 或就提取这一段代码试下,就可以判断出是 什么问题了。
H HAZL Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-04 #6 这是我的测试代码,同样是画两条线,和画象皮筋框运算量差不多。 测试的图象是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;
这是我的测试代码,同样是画两条线,和画象皮筋框运算量差不多。 测试的图象是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;
H HAZL Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-04 #7 还有一个奇怪的现象,有两张图片,都是jpg格式调入,转换成位图然后画象皮筋框。 其中一图是我自已的照片,711*1026 24位,248K,另一图是拳王2002带的图片,1024*768 24位,230K左右。 在画我的照片时没有问题一切正常,同样的代码,换成拳王的图片就慢了。这是为什么呢?
还有一个奇怪的现象,有两张图片,都是jpg格式调入,转换成位图然后画象皮筋框。 其中一图是我自已的照片,711*1026 24位,248K,另一图是拳王2002带的图片,1024*768 24位,230K左右。 在画我的照片时没有问题一切正常,同样的代码,换成拳王的图片就慢了。这是为什么呢?
远 远帆 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-05 #8 你这么大的图干麻还偷懒用双缓冲?这么做系统的消耗当然是大得惊人。 你应该按“爱元元的哥哥”所说,自已处理缓冲问题。
H HAZL Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-05 #9 我要是会自已处理缓冲我就不来问了,我试着在内存里建了一个位图,在上面画了,然后再bitblt前面的Timage里,没用,不开双缓冲还是个闪。因为我要做的是象皮筋线,就是mouse指到哪儿,线条跟着画到哪儿。所以动一下就要更新一下,哪位有好方法?
我要是会自已处理缓冲我就不来问了,我试着在内存里建了一个位图,在上面画了,然后再bitblt前面的Timage里,没用,不开双缓冲还是个闪。因为我要做的是象皮筋线,就是mouse指到哪儿,线条跟着画到哪儿。所以动一下就要更新一下,哪位有好方法?
远 远帆 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-05 #10 把代码发到yuan-fan@21cn.com,我来改着试试。
G goeasy Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-05 #11 设置image1.stretch := true;
H HAZL Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-05 #12 不拉伸,拉了就变型了。 代码很简单,就是建一个Tbitmap,把包含线的矩形画到这个bitmap上,然后再bilbit到原TIMAGE。PICTURE。BITMAP。CANVES的对应位置.原代码在另一台机上,哪台机不能上网.公司的破规定.妈的
不拉伸,拉了就变型了。 代码很简单,就是建一个Tbitmap,把包含线的矩形画到这个bitmap上,然后再bilbit到原TIMAGE。PICTURE。BITMAP。CANVES的对应位置.原代码在另一台机上,哪台机不能上网.公司的破规定.妈的
H HAZL Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-05 #13 我刚才看了一下vcl处理双缓冲的代码。照着扒了一个,也不管用,可能哪里没搞好。再试吧