【问题标题】:image buffer implementation in delphidelphi中的图像缓冲区实现
【发布时间】:2010-06-22 10:57:18
【问题描述】:

上下文

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


信息

这是我的代码

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

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

myrealpicture.picture:=bufferpicture.picture;

end;

运行代码时,我得到一个错误显示如下。


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

【问题讨论】:

    标签: delphi image canvas drawing buffer


    【解决方案1】:
    1. 您似乎没有创建myrealpicture
    2. 我会使用Assign的方法

      MyRealPicture.Picture.Assign(BufferPicture.Picture);

    3. 您可以使用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;
      
    4. 您可以只使用DoubleBuffered 属性

    【讨论】:

      【解决方案2】:

      使用DoubleBuffered 属性

      【讨论】:

        猜你喜欢
        • 2012-01-27
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多