TBitmap在Delphi 2009中绘制透明图像

时间:2009-11-13 09:28:46

标签: delphi bitmap delphi-2009

在TBitmap对象上绘制半透明PNG图像时出现问题。

如果TBitmap的HandleType设置为bmDDB,则画布将被绘制为透明。 但问题是它不适用于所有类型的机器(例如:苹果电脑上的Windows)。

当TBitmap的HandleType属性设置为bmDIB时,画布背景将被绘制为白色。

bmp.HandleType := bmDIB;

我尝试将Brush样式设置为bsClear。但它用黑色绘制透明像素。

如何绘制图像以保持其透明度和平滑的曲线边缘。

由于 帕。

1 个答案:

答案 0 :(得分:4)

当然可以将具有透明背景的bmDIB位图绘制到画布上:

procedure TForm1.FormPaint(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.PixelFormat := pf32bit;
    Bmp.HandleType := bmDIB;
    Bmp.Width := 700;
    Bmp.Height := 400;
    Bmp.Transparent := TRUE;
    Bmp.TransparentColor := clMaroon;

    with Bmp.Canvas do begin
      Brush.Color := clMaroon;
      FillRect(Rect(0, 0, Bmp.Width, Bmp.Height));

      Brush.Color := clBlue;
      FillRect(Rect(42, 42, 200, 300));
    end;

    Canvas.Draw(12, 12, Bmp);
  finally
    Bmp.Free;
  end;
end;

请注意,首先填充整个位图,颜色设置为TransparentColor

但是为了获得更多控制和速度,您应该研究一种不依赖于GDI(涉及图形卡和驱动程序功能)的解决方案,例如Graphics32