在Form canvas Delphi上绘制40位图的最快方法

时间:2013-06-28 19:23:11

标签: delphi bitmap drawing

我有一个包含3个成员的记录数组(位图路径,x,y)。

我必须在表格画布上用x,y。

加载记录绘制位图中的值

我尝试使用此代码:

const
  MAXX = 40 ;
type
  ImgObj = record
    Addrs : string;
    X: Integer ;
    Y: Integer ;
  end;
var
  All : array[1..MAXX] of ImgObj ;

procedure TForm1.btn1Click(Sender: TObject);
var
  BuffBitmap :TBitmap ;
  I,j,k: Integer;
begin
  // set  all bit maps
  ....
  // draw 40 images
  BuffBitmap := TBitmap.Create ;
  for I := 1 to MAXX do
  begin
    BuffBitmap.LoadFromFile(All[i].Addrs);
    for j := 0 to BuffBitmap.Width-1 do
      for k := 0 to BuffBitmap.Height-1 do
      begin
        Self.Canvas.Pixels[All[i].X+j,All[i].Y+k] := BuffBitmap.Canvas.Pixels[j,k] ;
      end;
  end;

  BuffBitmap.free;
end;

这段代码很好地吸引了他们,但是很长一段时间大约8秒。 我必须在我的应用程序中重复此事件。

现在我如何能够以最快的方式在画布上绘制40张图像。

  • 我应该在内存上存储bitmpas以重复吗?
  • 我应该使用指针来绘制图像吗?
  • 或者我应该使用线程来获得最快的抽奖?

请告诉我样品谢谢。

1 个答案:

答案 0 :(得分:2)

使用Draw方法:

BuffBitmap.LoadFromFile(All[i].Addrs);
Self.Canvas.Draw(All[i].X, All[i].Y, BuffBitmap);