2015-07-11 4 views
2

Это вопрос для тех, кто знаком с форматами WMF/EMF.WMF плохо обработан с помощью PlayEnhMetafile

Интересно, почему прикрепленный метафайл не корректно отображает файл PlayEnhMetafile (после преобразования с помощью SetWinMetaFileBits, я тестирую его в Delphi). Он не корректно отображает многие другие приложения (например, Total Commander viewer, Irfanview, ...), но корректно отображает средство просмотра изображений MS Office 2010.

Примечание: Это изображение происходит из файла RTF, созданного MS Word 2010, и является результатом объекта Equation.

Что может быть причиной и как правильно отобразить это изображение.

Link to image

+0

Можете ли вы показать код, в MCVE –

+0

я думаю, что первым было бы неплохо знать, почему это делает по-разному в тех приложениях, которые я упомянул. –

+0

Как мы узнаем это, не зная, как вы его визуализируете? Вы не будете показывать свой код, и вы не покажете, как будет отображаться ваше изображение. Похоже, вы не полностью привержены. –

ответ

1

Казалось бы, что метафайл 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"); 

Выше, очевидно, протекающие ресурсов, но демонстрирует правильное воспроизведение.

Результат:

enter image description here
(Click for Full Size)

+0

Спасибо, теперь очевидно, что SetWinMetaFileBits прикрутил это изображение вверх. Кажется, мне приходится использовать устаревшие функции WinAPI (больше не документированные на веб-сайте MSDN), надеюсь, что это не будет опасно для будущего. –

+0

@user Митч отлично поработал здесь. Вы можете принять его ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^