2015-07-11 100 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米奇在這裏做得很好。你可能會接受他的回答。 –

相關問題