也许这是一个很容易解决的问题,但我还没有找到完美的解决方案。 我正在尝试使用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文件?
答案 0 :(得分:8)
我相信你需要比GetHIcon()
更强大的方法。它更像是一个“快速而肮脏”的选择,绝不是无损。
以下是一个类的示例,可以在转换为ICO的过程中保留图像质量:
答案 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来实现你想要的东西。)
中,应以编程方式提供相同的选项