Почему Image.Save (Stream, ImageFormat) выбрасывает исключение? - PullRequest
3 голосов
/ 13 ноября 2010

Я пытаюсь преобразовать изображение в иконку.Моя функция:

private Icon GenerateIcon(int width, int height)
{
    using (Bitmap icon = _backingImage.GetThumbnailImage(width, height, () => false, System.IntPtr.Zero) as Bitmap)
    using(MemoryStream imgStream = new MemoryStream())
    {
        icon.Save(imgStream, System.Drawing.Imaging.ImageFormat.Icon);
        return new Icon(imgStream);
    }
}

Но когда программа вызывает метод, она выдает ArgumentNullException("encoder"), где я звоню icon.Save.

Я нахожу это странным, потому что яне передавая кодировщик, я хочу, чтобы инфраструктура выяснила, каким должен быть кодировщик, поэтому я передаю ImageFormat.

Неужели нет кодеров для * 1011?* или я что-то не так делаю?

Ответы [ 2 ]

4 голосов
/ 24 января 2011

Просто конвертируйте изображение в иконку:

Icon myIcon = Icon.FromHandle(((Bitmap)myImage).GetHicon())

, а затем сохраните его в потоке:

myIcon.Save(myStream);

regards, Kate

4 голосов
/ 13 ноября 2010

Вы правильно догадались: GDI + поддерживает только ICON декодер .

Возможно, вы захотите выполнить преобразование самостоятельно. В этом случае см http://www.codeproject.com/KB/GDI-plus/safeicon.aspx.

...