我有一个代码通过位图(到另一种形式)将paintbox1复制到image1,但是这种复制导致白色背景出现在image1中。
如何删除?在paintbox中根本没有白色,实际上paintbox有一个圆形绘制区域。
abitmap := tbitmap.create();
aBitmap.Width := anotherform.PaintBox1.Width;
aBitmap.Height := anotherform.PaintBox1.Height;
BitBlt(aBitmap.Canvas.Handle,
0,
0,
aBitmap.Width,
aBitmap.Height,
infoontop.PaintBox1.Canvas.Handle,
0,
0,
SRCCOPY);
image1.picture.Bitmap := abitmap;
答案 0 :(得分:4)
TPaintbox
控件不会以TImage
的方式存储持久位图。绘图框是通过OnPaint
事件按需绘制自身的控件。当绘图框的父级收到WM_PAINT
消息时,将触发此事件。父项是相关的,因为绘制框是一个非窗口控件,因此实际绘制到其父级。
您需要做的是重构代码,以便OnPaint
处理程序简单地调用方法来执行绘制。像这样:
procedure TMyClass.DoPaint(Canvas: TCanvas; Width, Height: Integer);
begin
....
end;
然后在你的OnPaint
处理程序中执行:
DoPaint(PaintBox1.Canvas, PaintBox1.Width, PaintBox1.Height);
当您希望绘制位图时,您可以:
DoPaint(Bitmap.Canvas, Bitmap.Width, Bitmap.Height);