为什么复制位图会导致出现白色背景

时间:2014-09-17 12:04:59

标签: delphi

我有一个代码通过位图(到另一种形式)将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;

1 个答案:

答案 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);