Надеюсь, кто-то исправит меня, если я ошибаюсь, но я не думаю, что в WPF есть что-то подобное. Но, надеюсь, это один из многих случаев, когда успехи в технологии стали устаревшими, как мы привыкли делать вещи. Как «как мне намотать цифровые часы?»
Насколько я понимаю, причина, по которой ImageCodecInfo.GetImageDecoders() необходима в System.Drawing, связана с kludgy-характером самого System.Drawing: System.Drawing - это управляемая оболочка вокруг GDI +, которая является неуправляемой оболочкой вокруг части Win32 API. Таким образом, может возникнуть причина, по которой новый кодек будет установлен в Windows без .NET, зная об этом. И то, что вернулось из GetImageDecoders(), представляет собой всего лишь набор строк, которые обычно передаются обратно в System.Drawing/GDI + и используются для поиска и настройки соответствующей DLL для чтения/сохранения изображения.
С другой стороны, в WPF стандартные кодировщики и декодеры встроены в фреймворк и, если я не ошибаюсь, не зависят от того, что не гарантировано будет установлено как часть рамки. Следующие классы наследуют от BitmapEncoder и доступны из коробки с WPF: BmpBitmapEncoder, GifBitmapEncoder, JpegBitmapEncoder, PngBitmapEncoder, TiffBitmapEncoder, WmpBitmapEncoder. Существуют BitmapDecoders для всех тех же форматов, плюс IconBitmapDecoder и LateBoundBitmapDecoder.
Возможно, вы имеете дело с случаем, который я не представляю, но мне кажется, что если вам нужно использовать класс, который наследуется от BitmapEncoder, но не был включен в WPF, это, вероятно, ваш собственный пользовательский класс которые вы установили бы с вашим приложением.
Надеюсь, это поможет. Если мне не хватает необходимой части картины, пожалуйста, дайте мне знать.
Я просто исследую эту проблему, и вы ошибаетесь. Изображение WPF такое же, как System.Drawing: управляемая оболочка для файлов Win32, а именно WIC (компонент Windows Imaging). Кодер/декодер не встроен в фреймворк, и я думаю, что никогда не будет (соображений по повторному использованию производительности и кода, они все в Windows). Они просто забыли добавить функциональность, чтобы перечислить форматы :(. – fejesjoco 2011-04-07 16:55:13