快速绘图问题(Image) ( 积分: 50 )

  • 主题发起人 主题发起人 bxcs
  • 开始时间 开始时间
B

bxcs

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Draw(var BitMap: TBitmap; X, Y, Color: Integer);
begin
BitMap.Canvas.Pen.Color := Color;
BitMap.Canvas.MoveTo(X, BitMap.Height);
BitMap.Canvas.LineTo(X, Y);
Image.Picture.Bitmap.Assign(BitMap);
end;
在Timer中 调用Draw方法,且每次调用Inc(X)
绘图的速度较慢,有没有一种较快的绘图方法.
 
procedure Draw(var BitMap: TBitmap; X, Y, Color: Integer);
begin
BitMap.Canvas.Pen.Color := Color;
BitMap.Canvas.MoveTo(X, BitMap.Height);
BitMap.Canvas.LineTo(X, Y);
Image.Picture.Bitmap.Assign(BitMap);
end;
在Timer中 调用Draw方法,且每次调用Inc(X)
绘图的速度较慢,有没有一种较快的绘图方法.
 
1. Self.DoubleBuffered := true;
2. 先设置不可见,画完再显示呢(或者不重画什么的)
 
关于双通道的问题我已经做了.
我这种先绘制在位图上,然后显示在Image上的速度好像有些慢,但是直接绘在Image.Canvas上,原来的图像会在更新的时候消失,并且Image的宽度不会随着图像的宽度而改变.
需要一种更好更快的方法.
 
为什么X轴一个象素一个象素的移动呢?
块复制不是可以快些么?
 
TO:ttlove你说的方法我已经试过了,在10000次的时候,相差不大。
 
不应该设置 DoubleBuffered ,而是要使用双缓冲技术。
 
如果只是用坐标画线,TChart或许是更好的选择,在OnTimer中,先得到x,y,然后
Chart1.Series[1].AddXY(x,y,'',clTeeColor);
之前你得为Chart1先添加一个Series,比如Series1
 
To:青出于蓝
我不太理解双缓冲技术,在网上搜索说DoubleBuffered就是双缓冲技术。能给点解释吗?

TO:kerbcurb
你提供的方法确实是个好方法,但是如果我画20,000次的话,并且保留所有的图形,它的速度实在是不理想。
 
你可以到网上找找双缓冲的例子,而不是简单地设置窗口上的一个属性。其实你的Draw函数中已经有一个Bitmap对象,所以很容易就可以改为双缓冲了。
 
api的绘图太慢,考虑一下DirectDraw吧
 

Similar threads

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