3

我有一个具有透明度信息的 Delphi 位图(32 位)。我需要在保留透明度的同时将其转换并保存为 PNG 文件。

我目前拥有的工具是 graphics32 库、GR32_PNG(由 Christian Budde 提供)和 PNGImage(由 Gustavo daud 提供)。

做这个的最好方式是什么?

编辑 1:我的位图中不仅有一种颜色是透明的,而且需要保留具有不同透明度级别的像素。

编辑 2:我通过将图像的背景设置为 PNG 来获取带有 alpha 信息的位图,我只有一个空的 alpha 层。然后我在上面写上抗锯齿文本。然后我保存位图。当使用 gimp 打开时,它会显示透明度,放大后您可以看到抗锯齿的效果。

4

3 回答 3

4

使用 PNG 图像。在德尔福,试试这个:

function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String);
var
  oPNGDest: TPNGObject;
begin
  oPNGDest := TPNGObject.Create;
  try
    oPNGDest.Assign(oBMPSrc);
    oPNGDest.SaveToFile(sFilename); 
  finally
    oPNGDest.Free;
  end;
end;

如果这对您不起作用,您可能必须单独复制 alpha 和 RGB 值。

function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String);
var
  oPNGDest: TPNGObject;
begin
  oPNGDest := TPNGObject.CreateBlank(COLOR_RGBALPHA, 8, oBMPSrc.Width, oBMPSrc.Height);
  try
    oPNGDest.CreateAlpha;
    // Copy over RGB
    ..
    // Copy over Alpha
    ..
    // Save to file
    oPNGDest.SaveToFile(sFilename); 
  finally
    oPNGDest.Free;
  end;
end;
于 2011-01-12T18:02:12.310 回答
3

我无法让其他两个答案中的任何一个起作用。他们可能为其他人工作,但这是我所做的。

  1. 我创建了具有透明度的位图。
  2. 将其分配给 Graphics 32 库中的 TBitmap32。
  3. 将其分配给 Christian Budde 的 GR32_PNG for Graphics32 的 TPortableNetworkGraphics32
  4. 调用了 TPortableNetworkGraphics32.SaveToFile 方法
于 2011-01-13T15:38:44.887 回答
1

看看这个链接

有一个功能:

function WriteBitmapToPngFile( Filename : string; Bitmap : TBitmap; TransparentColor:TColor):boolean;
于 2011-01-12T17:16:04.670 回答