2

对于熟悉 WMF/EMF 格式的人来说,这是一个问题。

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

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

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

链接到图片

4

1 回答 1

1

Windows元文件似乎不喜欢转换为增强型元文件。以下代码似乎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");

以上显然是泄漏资源,但演示了正确的播放。

结果:

在此处输入图像描述
点击查看全尺寸

于 2015-07-11T22:55:48.943 回答