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

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

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

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

2 ответа

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

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

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

Спросите Google для ENMETA.EXE

Описание от Microsoft

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

Другие вопросы по тегам