Расширение списка поддерживаемых форматов изображений в GDI + - PullRequest
7 голосов
/ 18 января 2009

Цитировать документацию для пространства имен System.Drawing.Imaging

Класс Encoder позволяет пользователям расширять GDI + для поддержки любого формата изображения.

И все же я не могу найти никакой документации, примеров или чего-либо еще, что объясняет, как мне поступить в реализации моего собственного пользовательского формата файлов - большинство запросов возвращают много информации о передаче EncoderParameters, но ничего о реализации наших собственных кодировщиков?

В идеале я хотел бы иметь возможность реализовать это в C #, но я готов стряхнуть свой ATL, если это будет необходимо:)

Кто-нибудь сталкивался с какой-либо документацией или может дать какие-либо указания о том, как к этому подойти?

Обновление:
Наверное, мне стоит упомянуть то, что я пробовал до сих пор, но безрезультатно:

  • Поиск идентификаторов GUID, возвращаемых в классе ImageCodecInfo , чтобы выяснить, является ли это обычным интерфейсом COM (но не похоже), с намерением посмотреть на реализованные интерфейсы или посмотреть, если это просто запись в реестре.
  • Зашёл в метод Image.FromFile , чтобы найти, что это просто оболочка для gdiplus.dll
  • Множество поисковых запросов Google, которые, как представляется, предоставляют множество случаев использования существующих с указанием ваших собственных ImageEncoderParamerters; и несколько случаев, когда люди применяли свои кодеки другими способами.
  • Даже спросили в новостях: //microsoft.public.win32.programmer.gdi

1 Ответ

7 голосов
/ 28 января 2009

Хорошо, вот некоторая информация, которую мне удалось откопать. Кажется, что рекомендуемый (от Microsoft) способ сделать то, что вы хотите, - разработать кодек с поддержкой WIC для вашего формата. API Windows Imaging Component (WIC) встроен в Vista, но также доступен для XP и Win Server 2003, либо в .NET 3, либо в виде отдельной загрузки.

Однако, кажется, существует и другой способ расширить список кодеков GDI +, но эти воды намного мрачнее. Если вы откроете gdiplus.dll в шестнадцатеричном редакторе, вы найдете ссылку на следующий раздел реестра:

Software\Microsoft\Imaging\Codecs

Поиск по этому ключу отправит вам статью MSDN , в которой рассказывается о регистрации ваших собственных кодеков изображений на платформах Windows CE и Windows Mobile. Самое смешное, что gdiplus.dll в XP содержит указанный ключ реестра. Я не проверял, использует ли он его, хотя и не пытался разработать свой собственный кодек, ни для WIC, ни для GDI +.

Надеюсь, эта информация поможет вам, по крайней мере, начать.

...