我正在研究 delphi 7 ,我想知道如何将TpaintBox的内容复制/分配给Tbitmap?
像这样 public
{ Public declarations }
BitMap : TBitmap;
end;
我有一个声明为公共的Tbitmap,我就像这样创建onFormCreate
procedure TForm1.FormCreate(Sender: TObject);
begin
BitMap := TBitMap.Create;
end;
然后我在这个位图上画这样的东西
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;
使用PaintBox1.Canvas.Draw(0,0,BitMap);
我们可以在Bitmap中显示绘图框中的内容但是相反的方式是什么?
如何将paintbox的内容分配/复制到位图?
`BitMap:=PaintBox1.Canvas.Brush.Bitmap;`
这会编译,但是如果我这样做并再次调用procedure TForm1.DrawOnPainBox;
我得到access Violation
并且调试器会显示bitmap
和PaintBox1.Canvas.Brush.Bitmap
,即使某些行被绘制在颜料盒
答案 0 :(得分: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);
注意:在较新版本的Delphi中,您可以使用Bitmap.SetSize
代替Bitmap.Width
和Bitmap.Height
。
答案 1 :(得分:1)
TBitmap.setsize已在Delphi 2006中引入,您可能正在使用旧版本。只需更换
Bitmap.SetSize (X, Y)
通过
Bitmap.Width := X
Bitmap.Height := Y
它的速度较慢(但只有在循环中使用它才有意义),但是你将编译代码
如果这种情况经常发生,请声明一个新单位BitmapSize.pas:
unit BitmapSize;
interface
uses
graphics;
Type
TBitmapSize = class (TBitmap)
public
procedure Setsize (X, Y : integer);
end;
implementation
procedure TBitmapsize.Setsize(X, Y: integer);
begin
Width := X; // may need some more tests here (X > 0, Y > 0, ...)
Height := Y;
end;
end.
然后用TBitmapSize替换声明和创建位图TBitmap。
..
Var
B : TBitmapSize;
..
B := TBitmapSize.Create;