0

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

我必须通过 x , y 在 Form canvas 上加载记录绘制位图的值。

我试过这段代码:

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 存储在内存中以供重复使用吗?
  • 我应该使用用户指针来绘制图像吗?
  • 或者我应该使用线程进行最快的绘制?

请告诉我样品谢谢。

4

1 回答 1

2

使用绘制方法:

BuffBitmap.LoadFromFile(All[i].Addrs);
Self.Canvas.Draw(All[i].X, All[i].Y, BuffBitmap);
于 2013-06-28T19:27:52.143 回答