Дополнительное выравнивание пропорциональных шрифтовDelphi , Графика и Игры , Шрифты
Оформил: DeeCo Автор: Михаил Рудаков ВведениеОдним из недостатков TTF-формата является то, что ширина каждого символа является фиксированной величиной. То есть, ширина задана создателем шрифта для каждого конкретного символа и не зависит от его положения в тексте. Это неизбежно порождает эффект неравномерности при выводе текста на экран, которое не замечает большинство рядовых пользователей, но хорошо известный дизайнерам. Введите, например, в Word-е следующий текст: "AVALLOOOOOLTLTLTL"
Обратите внимание, что видимое расстояние между буквами A и V
заметно больше, чем между соседними O. С точки зрения компьютера все в порядке -
грубо говоря, Windows считает межсимвольным расстоянием резницу между самой
правой точкой предыдущего символа и самой левой текущего. Но с точки зрения
дизайна - это помарка, которую стандартными средствами исправить невозможно или
очень сложно (вручную регулировать межсимвольный интервал в Word-e). Как решить В прикладных задачах неровности шрифта можно исправить хотя бы частично, если рассчитывать и запоминать расстояния между каждыми парами символов. Предлагаемый невизуальный компонент позволяет это делать для символов из одного шрифта, запоминая межсимвольные расстояния при инициализации. При настройке объекта на конкретный шрифт, а точнее, канву, задается минимальное межсимвольное расстояние и строка, представляющая собой набор символов, для которых будет производиться дополнительное выравнивание. После того, как настройка произведена, печать текста производится с помощью процедуры, аналогичной TextOut. Примечание: компонент написан под библиотеку KOL (1.55), но может быть легко портирован и под VCL, так как разницы в их работе в данном случае немного. Пример работы компонента:Две верхние строчки напечатаны с дополнительны выравниванием, две нижние - стандартными средствами. Очевидно, что видимые расстояния между символами стали выглядеть гораздо лучше. Объекты и процедуры модуля FineFont
Надо заметить, что настройка компонента на новый шрифт происходит довольно медленно, несмотря на все оптимизации. Для символьного набора из 52 символов (английские заглавные + строчные буквы) инициализация идет 5 секунд на PII-233. Также очень сильно влияет и размер символов. Для ускорения работы следует как можно сильнее сжать символьный набор, исключить символы c вертикальными линиями по бокам - O, M, N, W и так далее. Но есть и другой способ:
P.S. Дополнительное выравнивание пропорциональных шрифтов позволяет частично исправить неравномерность вывода текста на экран, которая возникает из-за фиксированной ширины символов в TTF-формате. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |