Как я могу получить значок из 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;
    }
}

Конструктор Icon создает исключение со следующим сообщением: «Аргумент 'picture' должен быть изображением, которое можно использовать в качестве Icon".

Я подумал, что это может быть что-то с битовой глубиной цвета изображения, так как у меня были некоторые проблемы с этим ранее, но 32-битные и 24-битные изображения не работали. Возможно ли то, что я пытаюсь сделать?

Ответы на вопрос(7)

Решение Вопроса

что вы можете попробовать что-то вроде этого, прежде чем конвертировать ваше изображение в .ico:

    var bitmap = new Bitmap("Untitled.png"); // or get it from resource
    var iconHandle = bitmap.GetHicon();
    var icon = System.Drawing.Icon.FromHandle(iconHandle);

кудаicon будет содержать значок, который вам нужен.

 Anthony Johnston04 нояб. 2009 г., 14:06
Я получаю только 16 цветных значков, когда использую этот метод

48 × 48, 32 × 32, 24 × 24 (необязательно) и 16 × 16 пикселей.

И может / должен также содержать три разных глубины цвета:

24-битный с 8-битным альфа (32-битным)8 бит (256 цветов) с прозрачностью 1 бит4-битный (16 цветов) с 1-битной прозрачностью

Таким образом, поток памяти .png не помещается в конструктор иконки. На самом деле, если вы читаете заметки на другомперегрузки конструкторавы увидите все измерения «Размер» или «Ширина и высота», чтобы найти значок правильного размера в файле.

Более подробную информацию о ручном создании иконок можно найти в разделе "Создание значков Windows XP"

window.Icon = BitmapFrame.Create(Application.GetResourceStream(new Uri("YourImage.png",
UriKind.RelativeOrAbsolute)).Stream);

http://www.convertico.com/) который преобразует PNG в ICO.

который называется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);
}
 frameworkninja06 авг. 2009 г., 14:34
спасибо, мне нужна эта программа;)

иемpng2ico, Я использую его для создания значков Windows из PNG.

 Morten Christiansen21 дек. 2008 г., 22:59
Я попробовал это, но это полностью испортило изображение по краям прозрачных областей.

ImageSource значка окна в изображение PNG, и это работает, на удивление. Я не проверял это для значков в трее, хотя.

 Chris Rae27 сент. 2011 г., 11:36
Это не работает для значков в трее.

Ваш ответ на вопрос