语境

我正在画画布,它会定期更新,并且会闪烁。
从逻辑上考虑,我认为这是因为我的redraw方法清除了Canvas,然后一次在画布上绘制了一个元素。所以我的想法是写一个Timage然后将图片设置为Timage。



信息

这是我的代码

procedure Tmainwindow.Button3Click(Sender: TObject);
var bufferpicture:TImage;
begin

//draw stuff to bufferpicture
  //***
//draw stuff to bufferpicture

myrealpicture.picture:=bufferpicture.picture;

end;


运行代码后,我在下面显示错误。





由于canvas是只读属性,如何将一个画布设置为另一个画布?还是有更好的方法来做我想做的事?

最佳答案

看来您没有创建myrealpicture
我会使用方法Assign

MyRealPicture.Picture.Assign(BufferPicture.Picture);
您可以使用BitBlt将一个画布的内容复制到另一个画布:

var
  BackBuffer: TBitmap;
begin
  BackBuffer := TBitmap.Create;
  try
    { drawing stuff goes here}
    BitBlt(Form1.Canvas.Handle, 0, 0, BackBuffer.Width, BackBuffer.Height,
        BackBuffer.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    BackBuffer.Free;
  end;
end;

您可以只使用DoubleBuffered属性

09-11 00:12