【问题标题】:How to convert icon to png with alpha transparency in delphi?如何在delphi中将图标转换为具有alpha透明度的png?
【发布时间】:2012-03-15 14:25:56
【问题描述】:

下面的代码将从文件中提取图标并将其转换为 png 但没有 alpha 透明度?

var
   IconIndex : word;
   icon:TIcon;
   png:TPngImage;
   bmp:TBitmap;
begin
  IconIndex := 0;
  icon := TIcon.Create;
  icon.Handle := ExtractAssociatedIcon(hInstance,pChar(Edit1.Text), IconIndex) ;
  bmp:= TBitmap.Create;
  bmp.LoadFromFile('blank.bmp');
  DrawIcon(bmp.Canvas.Handle, 0, 0, icon.Handle) ;
  png := TPngImage.Create();
  png.Assign(bmp);
  png.SaveToFile('icon.png');
end;

【问题讨论】:

    标签: delphi


    【解决方案1】:

    PngComponents 包含一个单元 PngFunctions.pas,您可以在其中查看

    procedure ConvertToPNG(Source: TGraphic; out Dest: TPngImage);

    在那里您可以找到将 TIcon 转换为 TPngImage 的代码 - 或者直接使用该过程。

    【讨论】:

    • 嗨,乌维!我尝试使用 ConvertToPNG() 转换 256x256 大小的图标,我得到“系统资源不足”/“Systemressourcen erschöpft”。任何线索这里出了什么问题?
    • @Stefan,你能在bitbucket.org/uweraabe/pngcomponents 提交一个可重现的测试用例吗?
    • Issue#6 创建并附加了测试用例。
    • @Stefan:Vcl.Graphics.pas 中的已知错误:quality.embarcadero.com/browse/RSP-21318
    • @UweRaabe 你创建了 PngComponents 吗?
    【解决方案2】:

    我在谷歌搜索后发现了一些库,例如 PNG DelphiDelphi PNG and MNG libraries

    【讨论】:

    • Sourceforge 由于复制问题不再托管 PNG Delphi 项目。下载完全合法。
    【解决方案3】:

    虽然TPngImage is no longer open source,但如果我快速浏览一下我放在这里的旧副本,TPngImage.Assign 只会检查源是否为 TPngImage,如果不是,则让“默认”分配工作,并且对于 TBitmap 或 TGraphic,这很可能会在画布上使用普通绘图,从而消除透明度。

    这看起来像是要发布到Delphi QC

    【讨论】:

    • 霍奇斯代表他的雇主误导了我们。除非您当地的版权法强制执行追溯效力,否则旧版本的 PNG Delphi 代码仍受旧许可条款的保护,该许可条款是专有的且非常严格。
    猜你喜欢
    • 2015-01-26
    • 2018-10-19
    • 2021-12-06
    • 2012-01-29
    • 2018-06-05
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多