Я использую Python для создания приложения для рендеринга изображений, которое отображает массивы в виде изображений. Мне нужен способ автоматизации DPI экрана расчета, поскольку я генерирую изображения одного размера на разных мониторах (например, 2x2 дюйма). Я в Windows 10, Python 3.7.
Я не спрашиваю, как получить размер экрана монитора - как выяснить, имеет ли ваш монитор 3000x2000 пикселей (как было решено в: Как мне получить разрешение монитора в Python? ).
Скорее, я хочу что-то, что рассчитывает DPI в отдельности, и учитывает любые настройки масштаба, которые применял пользователь, которые могут изменить DPI своей системы. Например, я установил шкалу на 250%.
После этого ответа на бирже экспертов (https://www.experts -exchange.com / questions / 21794611 / Detecting-system-DPI-settings-in-Python.html ) я попытался использовать это:
from ctypes import windll
def get_ppi():
LOGPIXELSX = 88
LOGPIXELSY = 90
user32 = windll.user32
user32.SetProcessDPIAware()
dc = user32.GetDC(0)
pix_per_inch = windll.gdi32.GetDeviceCaps(dc, LOGPIXELSX)
print("Horizontal DPI is", windll.gdi32.GetDeviceCaps(dc, LOGPIXELSX))
print("Vertical DPI is", windll.gdi32.GetDeviceCaps(dc, LOGPIXELSY))
user32.ReleaseDC(0, dc)
return pix_per_inch
Кажется, это правильный шаг, но возвращает слишком низкое число. Возвращает 240, в то время как мой фактический DPI ближе к 285.
Я бы предпочел не использовать для этого среду GUI, такую как Qt, так как я хочу минимизировать накладные расходы, но если это единственный способ, то я это сделаю! Если мне нужно использовать фреймворк, я бы предпочел PyQt5.