Возможно, это очень простая проблема для решения, но пока я не нашел идеального решения. Я пытаюсь преобразовать PNG в ICO с C# и нашел вопрос converting .PNG to .ICO in 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?
Вы можете попробовать: https://gist.github.com/darkfall/1656050. Я могу сказать вам, что вам понадобится нечто более надежное, чем «GetHicon», потому что это быстрый и грязный метод и ни в коем случае не должен быть без потерь. – DonBoitnott
@DonBoitnott, пожалуйста, напишите свой комментарий в качестве ответа. Я заставил его работать с вашим предложением, и я считаю, что это правильный ответ. – Bazzz