Правильный способ конвертировать расширенный метафайл в метафайл Windows без округления пикселей - PullRequest
0 голосов
/ 09 февраля 2011

Когда я конвертирую расширенный метафайл (созданный с помощью GDI + в C #) в метафайл Windows старого стиля, результаты получаются очень грубыми, по-видимому, потому что координаты округляются до ближайшего пикселя экрана.Я вижу это, если я конвертирую либо через

GetWinMetaFileBits (emfh, bits_l, bits, MM_ANISOTROPIC, GetDC (0));

, либо с помощью метафайла GDI + :: EmfToWmfBits.Предположительно виновником является использование экрана постоянного тока. Эта публикация предлагает использовать принтер DC, который работает для меня, но, очевидно, не будет работать, если у пользователя нет установленных принтеров.Есть ли способ лучше?Я рассмотрел возможность создания постоянного тока в памяти с высоким разрешением для этой цели, но не могу найти для этого нужной документации, и я также беспокоюсь об используемой оперативной памяти.

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Обычный способ - создать DC памяти с гораздо более высоким разрешением, выполнить рендеринг к нему, а затем сохранить его так, как вы хотите.Обратите внимание, что размеры шрифта могут быть искажены этим.

 HDC memDC = CreateCompatibleDC ( hDC );
 HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
 SelectObject ( memDC, memBM );

С nWidth, nHeight намного больше.
Бит CreateCompatible должен устанавливать все dpi и т. Д., Но у меня были проблемы, когда шрифты были нарисованыфиксированный размер пикселя, а не его масштабирование - таким образом, в итоге они имели высоту всего 10 пикселей на изображении с разрешением 10 000 пикселей

0 голосов
/ 10 февраля 2011

Спросите у Google ENMETA.EXE

Описание от Microsoft

Пример загрузки включен.

...