Конвертировать прозрачный PNG в System.Drawing.Icon в коде - PullRequest
6 голосов
/ 04 февраля 2011

Я хочу преобразовать прозрачное изображение PNG в качестве ImageSource в System.Drawing.Icon, который учитывает прозрачность PNG.

WPF может как-то сделать это внутренне, если вы установите значок дляокно в PNG ImageSource, но есть ли способ сделать это вручную?В частности, мне это нужно, чтобы установить значок уведомления на панели задач, и я действительно хочу избегать использования неуклюжих ресурсов формата .ico.

Ответы [ 2 ]

6 голосов
/ 04 февраля 2011

Вы можете написать

Icon.FromHandle(image.GetHIcon())

Вам нужно явно уничтожить значок, когда вы закончите с ним :

[DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static bool DestroyIcon(IntPtr handle);

DestroyIcon(newIcon.Handle);
1 голос
/ 08 июня 2011

Я ищу это ~ Вот один, но не очень хороший!

        Icon icon;
        Image source = Image.FromFile(picturefile, true);

        Bitmap target = new Bitmap(iconsize, iconsize,
            System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        Graphics g = Graphics.FromImage(target);
        g.DrawImage(source, 0, 0, iconsize, iconsize);

        //target.Save("c:\\temp\\forest.bmp");

        icon = Icon.FromHandle(target.GetHicon());

        FileStream fs = File.Create(iconfile);
        icon.Save(fs);
        fs.Close();

        icon.Dispose();
        target.Dispose();
        source.Dispose();
...