2015-07-11 65 views
2

这是一个熟悉WMF/EMF格式的人的问题。WMF对PlayEnhMetafile渲染效果不佳

我不知道为什么附加的图元文件不能正确渲染与PlayEnhMetafile(使用SetWinMetaFileBits转换后,我在Delphi中测试它)。它无法正确显示许多其他应用程序(例如Total Commander查看器,Irfanview,...),但可以正确显示MS Office 2010图像查看器。

注意:该图片来自MS Word 2010制作的RTF文件,是方程式对象的结果。

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

Link to image

+0

你能告诉你的代码,MCVE –

+0

我觉得首先这将是很好知道为什么在我提到的那些应用程序呈现不同。 –

+0

我们如何才能知道,不知道如何渲染它?你不会显示你的代码,也不会显示你的图像如何呈现。感觉你没有完全投入。 –

回答

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"); 

以上是明显泄漏资源,但是它展示了一个正确播放。

结果:

enter image description here
Click for Full Size

+0

谢谢,现在很明显SetWinMetaFileBits将这个图片拧紧了。看来我必须使用已弃用的WinAPI函数(在MSDN网站上不再有文档记载),希望以后它不会有危险。 –

+0

@user米奇在这里做得很好。你可能会接受他的回答。 –

相关问题