在GDI+中扩展支持的图像格式列表

8

引用System.Drawing.Imaging命名空间的文档中的内容:

Encoder类使用户能够扩展GDI+以支持任何图像格式。

然而,我找不到任何说明、示例或其他东西来解释如何实现自己的自定义文件格式——大多数搜索返回有关传递EncoderParameters的大量信息,但没有关于实现我们自己的编码器的内容?

理想情况下,我希望能够在C#中实现这个功能,但如果需要,我准备好重拾ATL :)

是否有人找到了任何文档或能够提供任何有关如何处理这个问题的指针?

更新:
我应该提一下我到目前为止尝试过的事情,但都没有成功:

  • 查找ImageCodecInfo类返回的GUID,以确定它是否是普通的COM接口(但似乎不是),目的是查看已实现的接口,或者看看它是否只是一个注册表项。
  • 进入Image.FromFile方法,发现它只是gdiplus.dll的包装器。
  • 进行了大量的谷歌搜索,似乎提供了许多使用现有参数并指定自己的ImageEncoderParamerters的情况;还有一些人通过其他方式实现了自己的编解码器的案例。
  • 甚至在news://microsoft.public.win32.programmer.gdi中提问。
1个回答

9
好的,这里是我找到的一些信息。据微软推荐,你想要做的事情的建议方法是开发一个支持WIC的编解码器来处理你的格式。Windows图像组件(WIC)API已经内置于Vista中,但也可在XP和Win Server 2003上使用,可以通过.NET 3或单独下载获得。
然而,似乎还存在一种扩展GDI+编解码器列表的方法,但这方面的了解比较深入。如果你用十六进制编辑器打开gdiplus.dll,你会发现以下注册表键的引用:
Software\Microsoft\Imaging\Codecs

搜索该关键字将会带您到一篇MSDN文章,其中讨论了如何在Windows CE和Windows Mobile平台上注册自己的图像编解码器。有趣的是,XP上的gdiplus.dll已经将该注册表键硬编码在其中。虽然我没有检查它是否使用它,也没有尝试开发自己的编解码器,无论是针对WIC还是GDI+。

希望这些信息至少能帮助您入门。


这确实接近我想要的东西 - 理想情况下,我希望能够支持至少 v2 的框架,但我肯定会研究 WIC 的方法。 - Rowland Shaw
不幸的是,GDI+似乎忽略了“额外”的WIC编解码器(如果我使用代码列出GDI+解码器和代码列出WIC解码器,则后者返回更多),因此创建一个与WIC兼容的编解码器并不足以使其在GDI+中可用... - Medinoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接