如何禁用PNG的透明度

时间:2012-06-11 06:32:45

标签: delphi png transparency delphi-7

如何完全禁用给定PNGObject的透明度?顺便说一句,我正在使用版本1.564的PNGImage单元。

2 个答案:

答案 0 :(得分:8)

我认为永久禁用TPNGObject图像透明度是不可能的。或者至少我找不到这样做的财产。它应该由属性控制,因为当您分配或加载图像时,TPNGObject从指定的图像文件中获取图像参数(包括透明度)。

因此,作为一种解决方法,我希望在您加载或分配图像后使用RemoveTransparency过程:

uses
  PNGImage;

procedure TForm1.Button1Click(Sender: TObject);
var
  PNGObject: TPNGObject;
begin
  PNGObject := TPNGObject.Create;
  try
    PNGObject.LoadFromFile('C:\Image.png');
    PNGObject.RemoveTransparency;
    PNGObject.Draw(Canvas, Rect(0, 0, PNGObject.Width, PNGObject.Height));
  finally
    PNGObject.Free;
  end;
end;

答案 1 :(得分:2)

对于仅使用alpha混合将TPNGObject(Delphi PNGComponents库)绘制为某种背景颜色(例如:白色),请尝试以下操作:

uses 
  PNGImage, PNGFunctions;

procedure TForm1.Button1Click(Sender: TObject);
var png: TPNGObject;
    bmp: TBitmap;
begin
  try
    // load PNG
    png := TPNGObject.Create;
    png.LoadFromFile('MyPNG.png');

    // create Bitmap
    bmp := TBitmap.Create;
    bmp.Width  := png.Width;
    bmp.Height := png.Height;

    // set background color to whatever you want
    bmp.Canvas.Brush.Color := clWhite;
    bmp.Canvas.FillRect(Rect(0, 0, png.Width, png.Height));

    // draw PNG on Bitmap with alpha blending
    DrawPNG(png, bmp.Canvas, Rect(0, 0, png.Width, png.Height), []);

    // save Bitmap
    bmp.SaveToFile('MyBMP.bmp');

  finally
    FreeAndNil(png);
    FreeAndNil(bmp);
  end;
end;

要使用DrawPNG程序,您必须包含PNGFunctions单元。