Delphi XE7画布在一个线程中拉伸

时间:2014-10-30 13:45:15

标签: multithreading delphi draw

我有一个多线程的应用程序,在线程类中有一个FInputImage:VCL.Graphics.TBitmap。我有另一个名为FImageV的图像:VCL.Graphics.Bitmap。

检查以下代码:

  ...
  FImageV.LoadFromResourceName(HInstance, 'IMAGEH');
  ...

  FInputImage.Canvas.Lock;
  try
    FInputImage.Canvas.CopyMode := cmSrcCopy;
    FInputImage.Canvas.Brush.Color := clRed;
    FInputImage.Canvas.Rectangle(SR);
    FInputImage.Canvas.StretchDraw(SR, FImageV);
  finally
    FInputImage.Canvas.Unlock;
  end;

如果我提交更多图像以便运行多个线程,一段时间后StretchDraw什么也不做,它就会消失。我只看到用矩形(SR)绘制的红色矩形。

这是随机发生的。在线程内创建并释放所有对象。我还尝试将FImageH添加为单独的类变量,因为它是静态图像,但结果是相同的。

任何有关为何发生这种情况的想法都会受到欢迎。

谢谢!

1 个答案:

答案 0 :(得分:4)

也锁定FImageV的画布。