Вопрос

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

Я действительно хочу сглаживание и хотел бы использовать пропорциональные шрифты, если это возможно.

Я слышал, что могу использовать Gimp для выполнения рендеринга (с некоторой последующей обработкой?)

Я разрабатываю встраиваемое устройство с жидкокристаллическим дисплеем.У него 32-разрядный процессор, но я не хочу запускать Linux (перебор - слишком много места для кода / данных при слишком малой функциональности, которую я бы использовал)

C.C ++, если необходимо, но предпочтительнее C.Алгоритмы и идеи / концепции хороши на любом языке...

-Адам

Это было полезно?

Решение

В мои старые демо-сцены я часто рисовал все символы шрифта на одном большом растровом изображении.В коде я сохранил координаты (X, Y) каждого символа в шрифте, а также ширину каждого символа.Высота шрифта обычно была постоянной по всему объему.Если пробел не является проблемой, вы можете поместить все символы в сетку, то есть иметь постоянное расстояние между верхним левым углом каждого символа.

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

Более простой подход, который можно использовать для небольших черно-белых шрифтов, заключается в определении символов непосредственно в коде:

LetterA  db 01111100b
         db 11000110b
         db 11000110b
         db 11111110b
         db 11000110b
         db 11000110b

Формат файла XPM на самом деле представляет собой формат файла с синтаксисом C, который может использоваться как гибридное решение для хранения символов.

Другие советы

Вероятно, лучше всего использовать предварительно отрисованные растровые шрифты.Отобразите свой шрифт любым способом, расположите символы в виде сетки и сохраните изображение в простом несжатом формате, таком как PPM, BMP или TGA.Если вам нужно сглаживание, обязательно используйте формат, поддерживающий прозрачность (BMP и TGA поддерживают;Промилле - нет).

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

Наконец, чтобы отобразить строку, вы просматриваете каждый символ и растушевываете его прямоугольник из растрового изображения шрифта в буфер кадра, увеличивая положение растра на ширину символа.

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

Мы используем растровые шрифты, сгенерированные генератором растровых шрифтов anglecode #s :

http://www.angelcode.com/products/bmfont/

Это очень удобно, так как имеет XML-выходные данные, которые будет легко преобразовать в любой необходимый вам формат данных.

Bmfont от Angel Code также добавляет кернинг и лучшую упаковку к старой альтернативе, которая была MudFont.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top