Изменение кернинга в System.Drawing.Graphics.DrawString()

Я рендерим текст на изображение с помощью класса System.Drawing.Graphics и метода DrawString().

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

Проблема в том, что текст, сгенерированный DrawString(), имеет кернинг, отличный от текста в существующем изображении (мое лучшее предположение - приблизительно 0,5 - 1 пиксель на букву).

Может кто-нибудь сказать мне, если возможно изменить кернинг при использовании этого пространства имен и метода?

Кроме того, это нестандартный шрифт, который мы используем, и нам пришлось преобразовать его из открытого типа (который использовал исходное изображение) в истинный тип. Может быть, кернинг был изменен на этом этапе?

1 ответ

http://blog.stevex.net/rendering-text-using-the-net-framework/

Проблема заключается в том, что кернинг текста измеряется по-разному - более точно - но таким образом, который часто несовместим с тем, как разработчики приложений хотят использовать эти функции.

Решение:

ExtTextOut не был достаточно умен для такого рода кернинга, поэтому у вас нет этой проблемы. К сожалению,.NET Framework не имеет никакой функции рисования текста, к которой вы можете прибегнуть, поэтому единственный способ получить старое поведение - это P/Invoke к функции ExtTextOut в GDI.

Ссылка имеет пример кода.. надеюсь, это поможет!

Другие вопросы по тегам