【问题标题】:How to disable transparency for PNG如何禁用 PNG 的透明度
【发布时间】:2012-06-14 01:53:25
【问题描述】:

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

【问题讨论】:

  • 禁用透明度是什么意思?是否要将颜色格式/位深度设置为 Truecolor?即每像素 24 位,没有 alpha。
  • @Roberts,你为什么想要没有透明度的 PNG?我想如果你想要的话,你可以将 TPngImage 对象分配给一个新的 TBitmap 对象,然后将 TBitmap 对象再次分配回 TPngImage 对象。我不能 100% 确定这会奏效,但我认为应该会。
  • @Elling 我已经试过了:D。没用:D。
  • @Roberts 好的。我现在手头没有 Delphi,所以我无法帮助您进一步调查它。但是,我看到之前在 stackoverflow 上已经提出了类似的问题。也许这个问题的答案有一些帮助:stackoverflow.com/questions/1141561
  • @Elling TBitmap 支持部分透明

标签: delphi png transparency delphi-7


【解决方案1】:

我认为永久禁用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;

【讨论】:

    【解决方案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 单元。

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2010-10-16
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多