использование графики для измерения размера шрифта пользователя Windows

Недавно задав вопрос о получении пользовательских настроек шрифта, таких как 96 или 120 dpi, несколько гуру SO посоветовали мне использовать dpiX и dpiY для любого графического объекта.

Но относится ли dpi к размеру экрана (X / Y) или размеру шрифта (доступно только X)?

Другими словами, могу ли я быть уверен, что dpiX = dpiY во всех случаях?

В противном случае новый шрифт выглядел бы растянутым, не так ли?

Например, что если dpiX = 96 и dpiY = 60???


person Didier Levy    schedule 22.05.2011    source источник
comment
Связано с: stackoverflow.com/questions/929801/   -  person Adrian McCarthy    schedule 22.05.2011
comment
Размеры шрифта также имеют размеры X и Y. Я не уверен, что вы спрашиваете здесь.   -  person Cody Gray    schedule 22.05.2011


Ответы (1)


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

Например, если вам нужен нормально ориентированный текст, вы вычисляете высоту в пикселях с точки зрения вертикального DPI:

lf.lfHeight = -::MulDiv(point_size, ::GetSysMetrics(hdc, LOGPIXELSY), 72);

Если ваш текст повернут на 90 градусов, вы должны использовать LOGPIXELSX вместо LOGPIXELSY.

При этом я никогда не видел дисплея Windows, для которого DPI не был бы одинаковым в обоих направлениях. Я видел, что они различаются на некоторых принтерах, и драйверы обрабатывают это непоследовательно, что привело к этому вопрос без ответа.

person Adrian McCarthy    schedule 22.05.2011