【问题标题】:Reliable .wmf/wmf to Pixel based image conversion可靠的 .wmf/wmf 到基于像素的图像转换
【发布时间】:2010-10-21 14:42:57
【问题描述】:
下午好,
我在 .net 的内部 (System.Drawing) 基于 MetaFile / Image 处理包含透明区域的 .wmf 文件时遇到了一些问题。基本上每当我执行 MetaFile.LoadFile(...) 并将其保存为 tiff/png 等时,该源文件的某些区域都会丢失。我无法确定它,但它 - 似乎 - 元文件中基于矢量的信息工作正常,但基于像素的区域(例如放置在 .wmf 中的图像)丢失了。
有谁知道正确转换 wmf 文件的可靠、.net 本机和非 3rd-party 方式(如.. 基于像素的最终图像看起来像 .wmf.. 只是.. 好.. 像素化)?
干杯,谢谢,
-J
【问题讨论】:
标签:
.net
image
system.drawing
metafile
wmf
【解决方案1】:
问题是 .NET 是 GDI+,而 WMF/EMF 是 GDI。重要的是要知道 GDI+ 与 GDI 不兼容,它们具有完全不同的 API 和功能。因此,GDI 元文件中的某些操作的行为与预期不同。透明位图,以及元文件等的世界转换通常并不像 Microsoft 所宣传的那样真正起作用。
到目前为止,我得到的最好的结果是将元文件转换为原生 GDI+,这需要模拟 GDI 堆栈并应用一些重大调整来获得正确的文本定位等。
看看 EMFExplorer,那里找到的信息会很有帮助。
http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx
【解决方案2】:
好的,显然最可靠的将元文件 (.wmf/.emf) 转换为另一种格式的方法是使用 .png 作为输出格式,因为在 msdn 描述中的某处,元文件无论如何都会在内部处理/转换为 png 格式(与阿尔法等),例如默认情况下,Metafile.Save("somewher"...) 将以 png ImageFormat 输出。
因此,如果您确实想从元文件输入中创建非 png 图像,如果您加倍努力,将其转换并存储为 png,然后获取该 png 并重新转换,您将获得最佳结果它到你的最终格式。有点蹩脚,但话又说回来.. wmf 本身很奇怪,我已经得出(我个人的)结论它是邪恶的。 ;)
-J