在TBitmap对象上绘制半透明PNG图像时出现问题。
如果TBitmap的HandleType设置为bmDDB,则画布将被绘制为透明。 但问题是它不适用于所有类型的机器(例如:苹果电脑上的Windows)。
当TBitmap的HandleType属性设置为bmDIB时,画布背景将被绘制为白色。
bmp.HandleType := bmDIB;
我尝试将Brush样式设置为bsClear。但它用黑色绘制透明像素。
如何绘制图像以保持其透明度和平滑的曲线边缘。
由于 帕。
答案 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。