Приложение может извлекать метрическую информацию о физическом шрифте только после того, как шрифт был выбран в контекст устройства. Когда шрифт выбран в контекст устройства, он масштабируется для устройства. Метрическая информация о шрифте, конкретная для устройства - известна как единицы измерения устройства (пиксели).
Аппратно-независимые метрики в шрифтах - известны как расчетные единицы измерения. Чтобы применять в заданном устройстве, расчетные единицы измерения должны быть преобразованы в единицам измерения устройства (пиксели). Используйте нижеследующую формулу, чтобы конвертировать расчетные единицы измерения в единицы измерения устройства (пиксели).
DeviceUnits = (DesignUnits / unitsPerEm) * (PointSize/72) * DeviceResolution
Переменные в этой формуле имеют нижеследующее предназначение.
Переменная | Описание |
---|---|
DeviceUnits | Устанавливает атрибут шрифта DesignUnits, который преобразуется в единицы измерения устройства (пиксели). Это значение измеряется в тех же самых единицах измерения как и значение, заданное для DeviceResolution. |
DesignUnits | Устанавливает атрибут шрифта, который будет преобразован в единицы измерения устройства (пиксели). Это значение может быть любым атрибут шрифта, включая ширину буквы или значения надстрочного элемента для всего шрифта. |
unitsPerEm | Устанавливает размер em-квадрата для шрифта. |
PointSize | Устанавливает размер шрифта, в пунктах. (Один пункт равняется 1/72 дюйма.) |
DeviceResolution | Устанавливает число единиц измерения устройства (пикселей) на дюйм. Обычные значения могут быть 300 пикселей для лазерного принтера или 96 для экрана VGA. |
Эта формула не должна использоваться для, преобразования пикселей обратно в расчетные единицы измерения. Единицы измерения устройства (пиксели) всегда округляются к самому близкому пикселю. Передаваемая ошибка округления может стать очень большой, особенно, когда приложение работает с изменяемыми размерами экрана
Чтобы запросить расчетные единицы измерения, создайте логический шрифт, высота которого задана как -unitsPerEm. Прикладные программы могут извлекать значение для параметра unitsPerEm путем вызова функции EnumFontFamilies и проверкой члена ntmSizeEM структуры NEWTEXTMETRIC.