Delphi:GR32在TBitmap32上绘制带有alpha的PNG,而不清除其内容
在浏览了其他几个相关问题后,我无法找到一个适用于此的代码,因此请不要使用“重复问题”标签 给定一个具有每像素alpha通道或单色透明度的PNG图像,我需要代码将其绘制到已经包含图像的TBitmap32上(在PNG部分之前会绘制一些图形)。假设我的TBitmap32是200x200,我在上面画了一些图,然后我想在当前内容的顶部插入一个更小的透明PNG图像,透明地根据PNG的alpha通道数据或单色alphaDelphi:GR32在TBitmap32上绘制带有alpha的PNG,而不清除其内容,delphi,png,transparent,alpha,Delphi,Png,Transparent,Alpha,在浏览了其他几个相关问题后,我无法找到一个适用于此的代码,因此请不要使用“重复问题”标签 给定一个具有每像素alpha通道或单色透明度的PNG图像,我需要代码将其绘制到已经包含图像的TBitmap32上(在PNG部分之前会绘制一些图形)。假设我的TBitmap32是200x200,我在上面画了一些图,然后我想在当前内容的顶部插入一个更小的透明PNG图像,透明地根据PNG的alpha通道数据或单色alpha Uses pngimage, GR32; procedure TForm1.Button
Uses pngimage, GR32;
procedure TForm1.Button1Click(Sender: TObject);
Var b: TBitmap;
b32: TBitmap32;
p: TPngImage;
begin
b := TBitmap.Create;
b32 := TBitmap32.Create;
p := TPngImage.Create;
// 50x50 PNG
p.LoadFromFile('z:\test2.png');
b.Width := 200;
b.Height := 200;
b32.Width := 200;
b32.Height := 200;
// some drawing happens on the b32~
// insert code here to draw the png onto the b32, on top of
// what's already drawn, and at specific coordinates i.e 10,10
/////////////////////////////
b32.DrawTo(b.Canvas.Handle,0,0);
Canvas.Draw(0,0,b);
p.Free;
b32.Free;
b.Free;
end;
原始PNG:
迄今为止的结果:
使用透明PNG文件有两种方法:
那么,有什么不符合你的预期呢?我看到绿色图片很好地融入到黑色背景中,所以PNG alpha透明度得以保持。这是黑色背景的问题吗?如果是,在对bm32位图进行任何绘图之前,请使用透明颜色填充整个位图。我假设新位图的默认颜色可能是黑色或白色,并且可能是完全不透明的。黑色区域应该是透明的,混合在下面的另一个位图32(红色)Nvm it上。。我很愚蠢,最明显和最简单的步骤出乎意料地完成了任务:p.Draw(b32.Canvas,Rect(50100150200));德尔福西雅图版本的TPngImage完美地完成了这项工作: