PngComponents:将32bpp bmp转换为png

时间:2013-06-19 14:53:33

标签: delphi delphi-7

此代码适用于 PngImage 组件(来自G.Daud)。现在,在 PngImage 替换为D7(http://code.google.com/p/cubicexplorer/downloads/list)的 PngComponents 后,它不会编译。

function Bmp32ToPng(bmp: TBitmap): TPngObject;
var
  x, y: integer;
  src, dst: PngImage.pByteArray;
begin
  Result:= nil;
  if bmp.PixelFormat<>pf32bit then
    Exit;

  Result:= TPngObject.CreateBlank(COLOR_RGBALPHA, 8, bmp.Width, bmp.Height);
  Result.Canvas.Draw(0, 0, bmp);
  for y:= 0 to bmp.Height-1 do begin
    src:= bmp.ScanLine[y];
    dst:= Result.AlphaScanLine[y];
    for x:= 0 to bmp.Width-1 do
      dst[x]:= src[x*4+3];
  end;
end;

PngComponents 中不存在Createblank方法。它无法替换为简单Create,然后设置Width/heightWidth/height PngComponents 中的R / O.

如何将32bpp BMP(例如从shell32.dll获取)转换为PNG?

1 个答案:

答案 0 :(得分:1)

GraphicEx和PngComponents以及pngimage是冲突的。要解决它:

1)总是按特定顺序将它们放入uses子句中 - 首先 - GraphicEx或PngComponents,last - pngimage。

2)建立项目。在使用子句改变之后运行(或编译)项目是不够的。

PS)pngimage与PNGcomponent软件包一起安装,但这个版本已经过时了