Я хочу вычислить точную ширину текста в метрических единицах данной строки. Мой псевдокод выглядит так:
Bitmap.Canvas.Assign(Font);
PixelWidth := Bitmap.Canvas.TextWidth(Font)
MetricWidth := PtToMM * (PixelWidth * 72.0 / GetScreenDPI);
PtToMM
- это константа, которая определяется как 0.352777778
. Это довольно точно для некоторых шрифтов и размеров шрифта, но для других оно либо слишком мало, либо слишком велико. Я много экспериментировал с другими возможностями, такими как GetCharWidth32
и GetCharABCWidths
, также с режимом отображения MM_LOMETRIC
, но я просто не могу заставить его работать. Эта проблема преследует меня, поэтому, пожалуйста, кто-нибудь может помочь и показать мне, где я не прав. Большое спасибо!
РЕДАКТИРОВАТЬ Я проверил одну строку: метрическая ширина вычисляется как 4,17 см, ширина фактической распечатки (измеряется на бумаге) составляет 4,4 см (шрифт Times New Roman, размер 12).