Возможно я ошибаюсь, но FreeType предназначен для растеризации шрифта. В задачи FreeType не входит «рисование» строк. И уж совсем не задача FreeType, так это «плавное масштабирование текста».
Подготовка:
Ищем, качаем, ставим freetype-2.x.x-x-setup;
Или копируем dll с конфигом в папку с проектом. Обычно заказчика очень «радуют» необоснованные дополнительные библиотеки.;
Или пишем для своего проекта дистрибутив, который разместит FreeType где-то подальше от любопытных глаз, что тоже очень радует заказчика, который любит portable версии.
Алгоритм в общем виде:
Получили FT_Face для нужного шрифта;
Установили размер;
Идем в цикле по каждому символу строки;
Получаем glyph по каждому символу;
Получаем кернинг;
Подсчитываем, где он должен быть выведен, с учетом кернинга и специфических параметров символа (про плавный масштаб пока вообще забыли);
Попиксельно выводим в нечто промежуточное;
Освободили все глифы и структуры, выделенные под расчетные дела;
Освободили фейс;
Нечто промежуточное выводим в также посчитанную позицию рабочего контекста.
Это все без учета главной цели: чтобы при любом масштабе отношение высоты строки к ее ширине всегда должно быть константой. Т.е. «продергиваний» ширины строки быть не должно. Плюс еще вычисления.
В статье хотелось описать несколько подходов к плавному масштабу, когда овчинка все еще стоит выделки, не увлекаясь кодом исключительно ради кода.
А почему просто не доставать глифы и умножать на матрицу со scale/rotate/tranlate
— просто не получится, т.к. все равно придется много считать, и тратить массу машинного времени на вывод строки.
Честно говоря, ни связи, ни выгод между FreeType и темой статьи не вижу. Опять же, возможно я ошибаюсь, и все можно сделать во FreeType также просто, красиво и быстро, как в GDI+, но пока таким знанием я не владею.
Статья не про качество шрифта, а качество масштабирования. Я не знаю, как с помощью FreeType обеспечить плавное масштабирование текста. Т.е. как сделать так, чтоб отношение высоты текста к его ширине при масштабировании было константой? Если для этого нужно использовать какие-то дополнительные вычисления, то чем FreeType лучше? Если нельзя это сделать одной функцией, как в GDI+, то тем более – какое отношение к теме статьи имеет FreeType?
На этом ресурсе принято обмениваться опытом, знаниями. Можно ли увидеть пример использования FreeType для плавного масштабирования текста?
Вы абсолютно правы. Это красивое и элегантное решение, чтобы подменить в run-time все компоненты, созданные в дизайне, на свои. Только не всегда нужно заменять абсолютно все.
SetMemo имеет два параметра: указатель на TCustomMemo и AWithFree – уничтожать ли. Т.е. передать можно любого наследника TCustomMemo, не обязательно TMemo, компонент возьмет все необходимые ему свойства. И можно не уничтожать «донора», пусть живет как есть.
Подготовка:
Алгоритм в общем виде:
FreeType для вывода строки
Это все без учета главной цели: чтобы при любом масштабе отношение высоты строки к ее ширине всегда должно быть константой. Т.е. «продергиваний» ширины строки быть не должно. Плюс еще вычисления.
В статье хотелось описать несколько подходов к плавному масштабу, когда овчинка все еще стоит выделки, не увлекаясь кодом исключительно ради кода.
— просто не получится, т.к. все равно придется много считать, и тратить массу машинного времени на вывод строки.
Честно говоря, ни связи, ни выгод между FreeType и темой статьи не вижу. Опять же, возможно я ошибаюсь, и все можно сделать во FreeType также просто, красиво и быстро, как в GDI+, но пока таким знанием я не владею.
На этом ресурсе принято обмениваться опытом, знаниями. Можно ли увидеть пример использования FreeType для плавного масштабирования текста?
Далее в коде вызвать хотя бы даже с «родным» наследником Memo1: TMemo
Компилятор будет не доволен.
SetMemo имеет два параметра: указатель на TCustomMemo и AWithFree – уничтожать ли. Т.е. передать можно любого наследника TCustomMemo, не обязательно TMemo, компонент возьмет все необходимые ему свойства. И можно не уничтожать «донора», пусть живет как есть.