delphi中图像缓冲区的实现

发布于 2024-09-07 05:38:27 字数 607 浏览 5 评论 0原文

上下文

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


信息

这是我的代码

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

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

myrealpicture.picture:=bufferpicture.picture;

end;

运行代码后,我收到如下错误。 alt text


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

Context

I am drawing to a canvas, this is updated regularly and it flashes.
Logically thinking I assumed this is because my redraw method clears the Canvas then draws one element at a time to the canvas. so my idea was to write to a Timage then set the picture to the Timage.


Information

here is my code

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

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

myrealpicture.picture:=bufferpicture.picture;

end;

Upon running the code I get a error show below.
alt text


Question
How do I set the canvas of one to another since canvas is a read only property? or is there a better way to do what i am trying to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┊风居住的梦幻卍 2024-09-14 05:38:27
  1. 看来您没有创建 myrealpicture
  2. 我会使用方法 Assign

    MyRealPicture.Picture.Assign(BufferPicture.Picture);

  3. 您可以使用 BitBlt 将一个画布的内容复制到另一个画布:

    <前><代码>变量
    后台缓冲区:TBitmap;
    开始
    BackBuffer := TBitmap.Create;
    尝试
    {这里放绘图内容}
    BitBlt(Form1.Canvas.Handle, 0, 0, BackBuffer.Width, BackBuffer.Height,
    BackBuffer.Canvas.Handle, 0, 0, SRCCOPY);
    最后
    BackBuffer.Free;
    结尾;
    结尾;

  4. 可以只使用 DoubleBuffered 属性

  1. It looks like you did not create myrealpicture
  2. I would use the method Assign

    MyRealPicture.Picture.Assign(BufferPicture.Picture);

  3. You can copy the content of one canvas to another using 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. You can just use the DoubleBuffered property

情徒 2024-09-14 05:38:27

使用 DoubleBuffered 属性

use the DoubleBuffered property

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文