Использование Win32 TextOut для рисования текста под углом - PullRequest
2 голосов
/ 14 декабря 2010

Я использую GDI для рисования текста в контексте устройства, и я заметил, что кернинг или расположение символов отличаются, если угол равен точно 0, 90, 180 или 270. Как только я увеличу угол на 1 , размещение символов заметно отличается.

Вместо создания HFONT с углом, я использую ModifyWorldTransform для преобразования мировых координат контекста устройства, а затем я использую TextOut для рисования текста в контексте устройства.

Я думаю, что GDI использует подсказки шрифтов или какую-то другую специальную технику, когда текст рисуется с точностью, кратной 90 градусам, но не под любым другим углом.

Есть ли способ отключить эту подсказку, чтобы текст, отображаемый при 0 градусах, не отличался значительно от текста, отображаемого при 1 градусе?

Вот пример того, что я имею в виду (шрифт Monotype Corsiva):

0 градусов :
0 degrees

1 градус :
1 degree

Для некоторых шрифтов, таких как Arial или Tahoma, это не так заметно, но я бы хотел полностью избавиться от разницы, даже если это означает, что текст отображается не так хорошо, как может.

1 Ответ

1 голос
/ 14 декабря 2010

Я думаю, что это связано с сглаживанием, а не с намеками на шрифты.Вы можете попробовать следующее:

  • Отключить (шрифт) AA, но это не приведет к приемлемым результатам.
  • Создайте дескрипторы шрифтов для каждого возможного угла и посмотрите, сохраняется ли проблема.Я предполагаю, что это не так, но это не очень хорошее решение.
  • Визуализация текста в растровом изображении (например, с использованием CreateCompatibleBitmap()), отображение текста в нем, а затем визуализация повернутого растрового изображения.Это зависит от того, как часто вам нужны разные повороты / разный текст.
  • Играйте с fdwOutputPrecision и fdwQuality в CreateFont().Это может быть самым простым решением, но я думаю, вам придется немного поэкспериментировать.

hth

...