Экранное Пиксельное Разрешение в мм

Действительно ли возможно получить экранное пиксельное разрешение в мм с помощью API Win32? У меня есть приложение, которое показывает 0.3472222222222222 значением для этого на моем 1280x1024 монитор с 96 точками на дюйм. Но я не могу узнать, как это получило это значение. Любые подсказки будут полезны. Я могу использовать MFC также при необходимости.

РЕДАКТИРОВАНИЕ Извините за беспорядок, программное обеспечение, о котором я говорю, не использовало текущее разрешение экрана. Это читало его из некоторого файла конфигурации.

5
задан Naveen 6 January 2010 в 05:56
поделиться

4 ответа

Получить колпачки устройств для монитора дает вам размер в пикселях и мм, таким образом:

HDC screen = GetDC(NULL);
int hSize=GetDeviceCaps(screen,HORZSIZE);
int hRes=GetDeviceCaps(screen,HORZRES);
float PixelsPerMM=(float)hRes/hSize;   // pixels per millimeter
float PixelsPerInch=PixelsPerMM*25.4; //dpi
8
ответ дан 18 December 2019 в 11:57
поделиться

Раздел о написании "DPI-совместимых" приложений в MSDN стоит прочитать всем, кто заинтересован в обеспечении достойной поддержки переменного разрешения отображения. API для получения соответствующих метрик устройства и системы описаны здесь.

.
2
ответ дан 18 December 2019 в 11:57
поделиться

0.347222222222 мм на пиксель фактически эквивалентно приблизительно 73 dpi. Windows использует две стандартные настройки 72dpi и 96dpi, но также поддерживаются и пользовательские значения. Они являются номинальными значениями и могут не иметь никакого отношения к физическому экрану. Например, физический экран с разрешением 96 точек на дюйм может иметь значение 72 точек на дюйм, что повлияет на масштабирование изображений и компоновку в различных приложениях, а также на размер системных шрифтов и значков.

По умолчанию для Windows установлено значение 72dpi, и я обнаружил, что некоторые приложения (часто в их "О программе" и диалоговых окнах) некорректно отображают изображения при установке других значений. Если ваше приложение выдает отчет 0.34, кажется вероятным, что оно установлено на 72dpi или настраиваемое значение независимо от физического разрешения. При установке в соответствие с физическим разрешением ширина страницы, например, в Word, при установке уровня масштабирования 100% будет соответствовать физическому размеру бумаги. Так как эта метрика может быть установлена конечным пользователем, она не имеет прямого отношения к фактическому разрешению.

.
4
ответ дан 18 December 2019 в 11:57
поделиться
[

] Используйте функцию [] GetDC[] для получения рукоятки на мониторе, затем вызовите функцию [] GetDeviceCaps[] для получения размера монитора в миллиметрах. Например:[

] [
HDC monitor = GetDC( NULL );
int horizSize = GetDeviceCaps( monitor, HORZSIZE );
int vertSize = GetDeviceCaps( monitor, VERTSIZE );
]
0
ответ дан 18 December 2019 в 11:57
поделиться