У меня есть приложение, которое генерирует метафайлы (EMF). Он использует эталонный прибор (так называемый экран), чтобы сделать эти метафайлами, поэтому DPI изменений Метафайлов в зависимости от того, на какой машине код работает на.
Скажем, мой код намеревается создать метафайл, который равен 8.5 в x 11 дюйма. Используя мою рабочую станцию разработки в качестве ссылки, я получаю EMF с
- rclFrame {0, 0, 21590, 27940} (размеры метафайла в тысячных долях мм)
- a szlDevice {1440, 900} (размеры эталонного устройства в пикселях)
- a szlMillimeters {416, 260} (размеры эталонного устройства в мм)
Хорошо, поэтому rclFrame сообщает мне, что размер EMF должен быть
- 21590/2540 = 8.5 в широком
- 27940/2540 = 11 в высоком
Вперед. Используя эту информацию, мы можем определить физический DPI моего монитора, если моя математика правильная:
- (1440 * 25.4)/416 = 87.9231 Горизонтальный dpi
- (900 * 25,4)/260 = 87,9231 по вертикали на дюйм
Проблема
Все, что воспроизводит этот метафайл - преобразование EMF-to-PDF, страница "Сводка" при щелчке правой кнопкой мыши на EMF в проводнике Windows и т.д. - кажется, урезает рассчитанное значение DPI, отображая 87 вместо 87.9231 (даже 88 будет хорошо).
В результате получается страница с физическим размером 8,48 дюйма x 10,98 дюйма (с использованием 87 точек на дюйм) вместо 8,5 дюйма x 11 дюймов (с использованием 88 точек на дюйм) при воспроизведении метафайла.
- Возможно ли изменить DPI ссылочного устройства, чтобы информация, хранящаяся в метафайле, используемом для вычисления DPI, выходила в цельное целое?
- Могу ли я создать свой собственный контекст устройства и указать его DPI? Или мне действительно нужно использовать принтер для этого?
Спасибо за понимание.