Как получить значок из png-изображения?
Я создаю приложение WPF, поэтому в основном я работаю с классом ImageSource для значков. Однако значок панели задач должен иметь тип System.Drawing.Icon
. Возможно ли создать такой объект из png-изображения?
Я пробовал следующее:
private static System.Drawing.Icon _pngIcon;
public static System.Drawing.Icon PngIcon
{
get
{
if (_pngIcon == null)
{
//16x16 png image (24 bit or 32bit color)
System.Drawing.Bitmap icon = global::BookyPresentation.Properties.Resources.star16;
MemoryStream iconStream = new MemoryStream();
icon.Save(iconStream, System.Drawing.Imaging.ImageFormat.Png);
iconStream.Seek(0, SeekOrigin.Begin);
_pngIcon = new System.Drawing.Icon(iconStream); //Throws exception
}
return _pngIcon;
}
}
Конструктор значков генерирует исключение со следующим сообщением: "Аргумент" изображение "должно быть изображением, которое может использоваться как значок.
Я понял, что это может быть что-то с глубиной цвета изображения, поскольку у меня были некоторые проблемы с этим раньше, но оба 32-битных и 24-битных изображения не работали. Возможно ли, что я пытаюсь сделать?
Ответы
Ответ 1
Я думаю, вы можете попробовать что-то вроде этого, прежде чем преобразовать свой образ в .ico:
var bitmap = new Bitmap("Untitled.png"); // or get it from resource
var iconHandle = bitmap.GetHicon();
var icon = System.Drawing.Icon.FromHandle(iconHandle);
Где icon
будет содержать значок, который вам нужен.
Ответ 2
Там также есть веб-сайт (http://www.convertico.com/), который преобразует PNG в ICOs.
Ответ 3
Иконки представляют собой комбинацию из трех или четырех изображений:
48 × 48, 32 × 32, 24 × 24 (опционально) и 16 × 16 пикселей.
И может/должен также содержать три разных глубины цвета:
- 24-бит с 8-битным альфа (32-разрядным)
- 8-бит (256 цветов) с 1-битной прозрачностью
- 4-разрядный (16 цветов) с 1-битной прозрачностью
Таким образом, поток памяти .png не будет вписываться в конструктор значков. На самом деле, если вы читаете заметки на другом перегрузке конструктора, вы увидите все измерения "Размер" или "Ширина и высота" для поиска значок правильного размера в файле.
Более подробную информацию о ручном создании значков можно найти в разделе "" Создание значков Windows XP"
Ответ 4
Существует проект .NET под названием IconLib.
public void Convert(string pngPath, string icoPath)
{
MultiIcon mIcon = new MultiIcon();
SingleIcon sIcon = mIcon.Add("Icon1");
sIcon.CreateFrom(pngPath, IconOutputFormat.FromWin95);
mIcon.SelectedIndex = 0;
mIcon.Save(icoPath, MultiIconFormat.ICO);
}
Ответ 5
Вы можете установить ImageSource
значка окна на png-изображение, и это работает, на удивление. Я еще не подтвердил это для значков в лотке.
Ответ 6
Попробуйте это для меня,
window.Icon = BitmapFrame.Create(Application.GetResourceStream(new Uri("YourImage.png",
UriKind.RelativeOrAbsolute)).Stream);
Ответ 7
Вы можете попробовать небольшое приложение командной строки, называемое png2ico. Я использую его для создания значков Windows из pngs.