TBitmap32的透明Png

rou*_*uge 4 delphi alpha-transparency graphics32

我有一个png我想在TBitmap32中加载.

加载位图后,我调用:

Bitmap.DrawMode   := dmTransparent;
Bitmap.OuterColor := Bitmap.PixelS[0,0];
Run Code Online (Sandbox Code Playgroud)

但是所有白色像素都是透明的.我怎么能只为png图像的透明部分做到这一点?这是我的图像,以标准方式指示图像边缘周围的Alpha透明度.

在此输入图像描述

这是实际的图像:

在此输入图像描述

fan*_*cco 6

在加载PNG图像时,似乎TBitmap32可能会丢失alpha信息.

您可以考虑使用GR32PNG库,其文档摘录如下:

...
由于读取和写入使用中间TBitmap对象,因此需要不必要的额外存储器来存储位图数据.此外,通过将数据转换为TBitmap格式和从TBitmap格式转换数据,附加信息可能会丢失或处理错误
...
要通过Graphics32本机处理PNG文件,可以使用第三方库GR32 PNG库.此库使用本机PNG格式作为中间存储.通过分配TBitmap32对象,数据可以动态地编码/解码到PNG.使用此库还可以访问存储在PNG文件中的其他信息.

Graphics32项目页面


可以根据您的需要更改单元的代码使用示例:

var
  AlphaChannelUsed: Boolean;
begin
  LoadBitmap32FromPNG(Bitmap, <your path to the PNG image>, AlphaChannelUsed);

  if AlphaChannelUsed then
    Bitmap.DrawMode := dmBlend
  else
    Bitmap.DrawMode := dmOpaque;
end;
Run Code Online (Sandbox Code Playgroud)

当Bitmap一个TBitmap32对象.


生成的图像以TImage32组件内的形式加载:

在此输入图像描述