0

下午好,

我在使用.net 的内部(System.Drawing)基于 MetaFile / Image 处理包含透明区域的 .wmf 文件时遇到了一些麻烦。基本上每当我执行 MetaFile.LoadFile(...) 并将其保存为 tiff/png 等时,该源文件的某些区域都会丢失。我真的无法确定它,但它 - 似乎 - 元文件中基于矢量的信息工作正常,但基于像素的区域(例如放置在 .wmf 中的图像)丢失了。

有谁知道正确转换 wmf 文件的可靠、.net 本机和非 3rd-party 方式(如.. 基于像素的最终图像看起来像 .wmf.. 只是.. 好.. 像素化)?

干杯和感谢,-J

4

2 回答 2

0

好的,显然将元文件(.wmf/.emf)转换为另一种格式的最可靠方法是使用 .png 作为输出格式,因为在 msdn 描述中的某处元文件无论如何都会在内部处理/转换为 png 格式(使用 alpha 等) 并且默认情况下 Metafile.Save("somewher"...) 将以 png ImageFormat 输出。

因此,如果您确实想从 Metafile 输入创建非 png 图像,如果您加倍努力,将其转换并存储为 png,然后将该 png 重新转换为您的最终格式。有点蹩脚,但话又说回来.. wmf 本身很奇怪,我已经得出(我个人的)结论它是邪恶的。;)

-J

于 2009-04-27T20:44:23.167 回答
0

问题是 .NET 是 GDI+,而 WMF/EMF 是 GDI。重要的是要知道 GDI+ 与 GDI 不兼容,它们具有完全不同的 API 和功能。因此,GDI 元文件中的某些操作的行为与预期不同。透明位图,以及元文件等的世界转换通常并不像微软宣传的那样真正起作用。

到目前为止,我得到的最好的是将元文件转换为原生 GDI+,这需要模拟 GDI 堆栈并应用一些重大调整来获得正确的文本定位等。

看看 EMFExplorer,在那里找到的信息可能会有很大帮助。 http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx

于 2009-04-24T13:38:40.233 回答