реализация буфера изображения в Delphi - PullRequest
1 голос
/ 22 июня 2010

Context

Я рисую на холсте, он регулярно обновляется и мигает. Логично подумать, что я предположил, что это потому, что мой метод перерисовки очищает 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;

После запуска кода я получаю сообщение об ошибке, показанное ниже. alt text


Вопрос Как мне установить холст одного на другой, так как холст - это свойство только для чтения? или есть лучший способ сделать то, что я пытаюсь сделать?

Ответы [ 2 ]

5 голосов
/ 22 июня 2010
  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

3 голосов
/ 22 июня 2010

используйте свойство DoubleBuffered

...