Подтвердить что ты не робот

Как получить значок из 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-битных изображения не работали. Возможно ли, что я пытаюсь сделать?

4b9b3361

Ответ 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.