2010-11-13 2 views
3

Я пытаюсь преобразовать изображение в значок. Моя функция:Почему Image.Save (Stream, ImageFormat) бросает исключение?

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.

Разве нет никаких кодеров для ImageFormat.Icon, или есть что-то, что я делаю неправильно?

+0

@abatishchev: вот как [британская программа заклятье] (http://dictionary.reference.com/browse/programme): p –

+0

Спасибо, @Matt и извините :) – abatishchev

ответ

4

Вы все предположили, что это правильно: GDI + only supports a ICONдекодер.

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

+0

Спасибо, Фредерик. Это хорошо знать. –

4

Просто конвертировать изображения в иконе:

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

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

myIcon.Save(myStream); 

С уважением, Кейт

+1

Спасибо, SmartK8. Я знаю об этом, однако это не работает в сценариях частичного доверия. –

+0

Выше работы отлично :) Спасибо. – TomeeNS

+0

Это утечка указателя Hicon. –