将png转换为高质量的ico

时间:2013-06-27 11:01:55

标签: c# icons png

也许这是一个很容易解决的问题,但我还没有找到完美的解决方案。 我正在尝试使用C#将png转换为ico并找到问题converting .PNG to .ICO in C/C#,这样可以提供如下工作解决方案:

using (FileStream stream = File.OpenWrite(@"C:\temp\test.ico"))
{
    Bitmap bitmap = (Bitmap)Image.FromFile(@"c:\temp\test.png");
    Icon.FromHandle(bitmap.GetHicon()).Save(stream);
}

对于我自己的项目,我稍微改变了这种方法:

string pngFile = "path/to/pngfile";
using (Bitmap bitmap = new Bitmap(pngFile))
{
   using (Icon icon = Icon.FromHandle(bitmap.GetHicon()))
   {
      using (MemoryStream stream = new MemoryStream())
      {
         icon.Save(stream);
         // something interesting with icon here
      }
   }
}

我遇到的问题是由此产生的ico质量很差,我猜它已经调整到16x16并丢失了一些颜色深度,也许现在只有16种颜色?如何转换为更高质量的ico文件?

3 个答案:

答案 0 :(得分:8)

我相信你需要比GetHIcon()更强大的方法。它更像是一个“快速而肮脏”的选择,绝不是无损。

以下是一个类的示例,可以在转换为ICO的过程中保留图像质量:

  

https://gist.github.com/darkfall/1656050

答案 1 :(得分:3)

检查http://www.codeproject.com/Tips/627823/Fast-and-high-quality-Bitmap-to-icon-converter 这是将位图转换为png

的明确而快速的解决方案

答案 2 :(得分:2)

在引用的问题中,接受的解决方案使用imagemagick,这是一个很棒的图像处理工具,使您能够在从png转换为ico时控制大小,颜色深度等。我真的建议尝试这个解决方案。

使用imagemagick实用程序看起来像

convert -resize x16 -gravity center -crop 16x16 + 0 + 0 input.png \ -flatten -colors 256 output / favicon.ico

(然后你可以控制-resize和-colors来实现你想要的东西。)

在C#到http://imagemagick.codeplex.com

中,应以编程方式提供相同的选项