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

Преобразование растрового изображения в значок

Я пытаюсь преобразовать растровое изображение в значок. Но есть некоторая ошибка, поскольку результирующий файл просто пуст.

private void btnCnvrtSave_Click(object sender, EventArgs e)
{
    Bitmap bmp = new Bitmap(sourceFile);  //sourceFile = openfiledialog.FileName;
    IntPtr Hicon = bmp.GetHicon();
    Icon myIcon = Icon.FromHandle(Hicon);

    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Title = "Save Icon";
    sfd.Filter = "Icon|*.ico";
    sfd.ShowDialog();

    FileStream fileStream = new FileStream(sfd.FileName, FileMode.OpenOrCreate);
    myIcon.Save(fileStream);
    fileStream.Flush();
    fileStream.Close();

    MessageBox.Show("Image is converted successfully!");

    //Process.Start(sfd.FileName);
}

Я много пытался понять проблему, но не смог. Пожалуйста, скажите мне, где проблема.

4b9b3361

Ответ 1

Единственная проблема с этим кодом заключается в том, что он поддерживает растровые изображения до 128x128.

Он дает пустой файл ico, если размер растрового изображения больше.

Ответ 3

В этой статье описывается, как преобразовать растровое изображение в значок.

http://www.go4expert.com/forums/showthread.php?t=19250

Он очень похож на ваш:

using (Cbitmap = new Bitmap(sourceImage.Text))
{
    Cbitmap.MakeTransparent(Color.White);
    System.IntPtr icH = Cbitmap.GetHicon();
    Icon ico = Icon.FromHandle(icH);
}
using (System.IO.FileStream f = new System.IO.FileStream(destinationFldr.Text + "\\image.ico", System.IO.FileMode.OpenOrCreate))
{
    ico.Save(f);
}

Попробуйте.

EDITED: добавлены операторы using.

Ответ 4

Кроме того, этот вопрос SO ссылается на как преобразовать изображение в значок, что может привести вас в правильном направлении.

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