im working on delphi 7 and i want to how to copy/assign the content of a TpaintBox to a Tbitmap?
like this
public
{ Public declarations }
BitMap : TBitmap;
end;
i have a Tbitmap declared as public and i create it onFormCreate like this
procedure TForm1.FormCreate(Sender: TObject);
begin
BitMap := TBitMap.Create;
end;
Then i draw somthing on the bitmap like this
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;
with PaintBox1.Canvas.Draw(0,0,BitMap);
we can display what is there in Bitmap to a paintbox but what is the reverse way?
how to assign/copy content of a paintbox to a bitmap?
`BitMap:=PaintBox1.Canvas.Brush.Bitmap;`
this compiles but if i do this and again call the procedure TForm1.DrawOnPainBox;
i get access Violation
and the debugger show the bitmap
and PaintBox1.Canvas.Brush.Bitmap
even though some lines are drawn on the paintBox
To assign the contents of a TPaintBox
(let's call it PaintBox1
) to a TBitmap
(Bitmap
, say), you can do
Bitmap.Width := PaintBox1.Width;
Bitmap.Height := PaintBox1.Height;
BitBlt(Bitmap.Canvas.Handle,
0,
0,
Bitmap.Width,
Bitmap.Height,
PaintBox1.Canvas.Handle,
0,
0,
SRCCOPY);
Notice: In newer versions of Delphi, you can use Bitmap.SetSize
instead of Bitmap.Width
and Bitmap.Height
.
TBitmap.setsize has been introduced in Delphi 2006, you may be using an older version. Just replace
Bitmap.SetSize (X, Y)
by
Bitmap.Width := X
Bitmap.Height := Y
it's slower (but it matters only if you use it in a loop), but you will compile the code
if this happens too often, declare a new unit 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.
then replace in declaration and creation of your bitmap TBitmap with TBitmapSize.
..
Var
B : TBitmapSize;
..
B := TBitmapSize.Create;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With