WMF 使用 PlayEnhMetafile 渲染不佳

WMF rendered badly with PlayEnhMetafile

这是给熟悉 WMF/EMF 格式的人的问题。

我想知道为什么附加的图元文件无法使用 PlayEnhMetafile 正确呈现(在使用 SetWinMetaFileBits 转换后,我正在 Delphi 中对其进行测试)。它无法在许多其他应用程序(例如 Total Commander 查看器、Irfanview 等)中正确呈现,但可在 MS Office 2010 图像查看器中正确呈现。

注:此图来自MS Word 2010生成的RTF文件,是Equation Object的结果。

可能是什么原因以及如何正确渲染此图像。

Link to image

Windows 图元文件似乎不喜欢转换为 Enhanced 图元文件。以下代码似乎按预期呈现 wmf

[DllImport("gdi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern IntPtr GetMetaFile(string filename);

[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
private static extern bool PlayMetaFile(IntPtr hdc, IntPtr hmf);

var bmpNew = new Bitmap(7104, 992);
using (var gfx = Graphics.FromImage(bmpNew))
{
    var bmpHdc = gfx.GetHdc();
    var mfHdc = GetMetaFile(@"C:\Users\mrtel_000\Desktop\test.wmf");
    var res = PlayMetaFile(bmpHdc, mfHdc);
    if (!res)
    {
        throw new Win32Exception();
    }
    gfx.ReleaseHdc();
}

bmpNew.Save("demo.png");

以上明显是资源泄漏,但演示了正常播放。

结果:


(Click for Full Size)