Сохранить файл значка на жесткий диск - PullRequest
9 голосов
/ 08 мая 2011

Я знаю, что это должно быть невероятно легко - это невероятно, как долго я искал ответ на этот вопрос, основываясь на том, насколько это просто в VB6.Я просто хочу извлечь Icon из EXE-файла, используя Icon.ExtractAssociatedIcon, а затем сохранить этот файл значков на моем жестком диске.

Итак, вот что у меня есть, и я также покажу вам, что я пробовал, чтобы вы не думали, что я ленивый.

OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();

string s = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\IconData.ico";

Icon ico = Icon.ExtractAssociatedIcon(ofd.FileName);
Bitmap bmp = ico.ToBitmap();

bmp.Save(s, System.Drawing.Imaging.ImageFormat.Icon);

Приведенный выше код просто делаетфайл с именем "IconData.ico" на моем рабочем столе, длина которого составляет 0 байт.Опять же, я уверен, что это должно быть невероятно легко сделать, но за свою жизнь я не могу понять это.

Спасибо!

1 Ответ

13 голосов
/ 08 мая 2011

Вы получите лучшие результаты, если сохраните значок без предварительного преобразования в растровое изображение.Это связано с тем, что «Icon» может содержать несколько размеров, тогда как растровое изображение - это один размер, выбранный во время преобразования.

Класс Icon не имеет метода сохранения в файл, но он имеет метод сохранения в FileStream, так что вы можете сохранить его так:

        string s = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\IconData.ico";
        using (FileStream fs = new FileStream(s, FileMode.Create))
            ico.Save(fs);
...