Delphi 7,如何将Paintbox内容复制到Tbitmap?

Pre*_*ias 4 delphi delphi-7 draw

我正在研究delphi 7,我想如何将TpaintBox的内容复制/分配给Tbitmap?

像这样

 public
  { Public declarations }
   BitMap     : TBitmap;
 end;
Run Code Online (Sandbox Code Playgroud)

我有一个声明为公共的Tbitmap,我就像这样创建onFormCreate

      procedure TForm1.FormCreate(Sender: TObject);
      begin
      BitMap     := TBitMap.Create;
      end;
Run Code Online (Sandbox Code Playgroud)

然后我像这样在位图上绘制一些东西

      procedure TForm1.DrawOnPainBox;
        begin
         If BitMap.Width  <> PaintBox1.Width  then BitMap.Width  := PaintBox1.Width;
         If BitMap.Height <> PaintBox1.Height then BitMap.Height := PaintBox1.Height;
         BitMap.Canvas.Rectangle(0,0,random(PaintBox1.Width ),random(PaintBox1.Height));
         PaintBox1.Canvas.Draw(0,0,BitMap);
        end;
Run Code Online (Sandbox Code Playgroud)

PaintBox1.Canvas.Draw(0,0,BitMap);我们可以显示的内容有位图中的颜料盒,但什么是相反的呢?

如何将一个paintbox的内容分配/复制到位图?

 `BitMap:=PaintBox1.Canvas.Brush.Bitmap;` 
Run Code Online (Sandbox Code Playgroud)

这编译,但如果我这样做,再次调用procedure TForm1.DrawOnPainBox;我得到access Violation和调试器显示bitmap,PaintBox1.Canvas.Brush.Bitmap即使有一些线条绘制在paintBox

在此输入图像描述

在此输入图像描述

And*_*and 10

要将TPaintBox(让我们称之为PaintBox1)的内容分配给TBitmap(Bitmap比方说),你可以这样做

Bitmap.Width := PaintBox1.Width;
Bitmap.Height := PaintBox1.Height;
BitBlt(Bitmap.Canvas.Handle,
  0,
  0,
  Bitmap.Width,
  Bitmap.Height,
  PaintBox1.Canvas.Handle,
  0,
  0,
  SRCCOPY);
Run Code Online (Sandbox Code Playgroud)

注意:在较新版本的Delphi中,您可以使用Bitmap.SetSize而不是Bitmap.WidthBitmap.Height.