7

也许这是一个非常容易解决的问题,但我还没有找到完美的解决方案。我正在尝试使用 C# 将 png 转换为 ico并发现在C/C# 中将 .PNG 转换为 .ICO的问题,该问题提供了如下的工作解决方案:

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 文件?

4

3 回答 3

8

我相信您将需要一种比GetHIcon(). 它更像是一种“快速而肮脏”的选择,而且绝不是无损的。

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

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

于 2013-06-27T12:17:45.210 回答
3

检查http://www.codeproject.com/Tips/627823/Fast-and-high-quality-Bitmap-to-icon-converter 这是将位图转换为 png 的清晰快速的解决方案

于 2013-09-18T05:44:46.793 回答
2

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

使用 imagemagick 实用程序看起来像

转换 -resize x16 -重心 -crop 16x16+0+0 input.png \ -flatten -colors 256 output/favicon.ico

(然后你可以控制 -resize 和 -colors 来实现你正在寻找的东西。)

相同的选项应该可以通过http://imagemagick.codeplex.com在 C# 中以编程方式使用

于 2013-06-27T11:09:21.497 回答