Изменение кернинга в 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.
Ссылка имеет пример кода.. надеюсь, это поможет!