Компилируемый растровый шрифт (CBF)

Для вывода текста на индикаторы c контроллерами ST7528, ST7565P, KS0108 мне пришлось изобрести шрифт, который я назвал CBF (Compiled Bitmap Font).

Особенности CBF:

  • Компилируемый
  • Пропорциональный
  • Растровый

Компилируемый, означает, что файл шрифта можно скомпилировать Си-компилятором.

О видеопамяти контроллеров

Особенность вышеназванных контроллеров в том, что их видеопамять делится на страницы и колонки. Адрес колонки задает вертикальный ряд пикселей. Страница задает группу из восьми горизонтальных рядов пикселей. Таким образом, задав страницу и адрес колонки мы можем обратиться к восьми вертикальным пикселям. После записи изображения в эти пиксели, контроллер автоматически изменяет адрес колонки на единицу. Автоматического изменения страницы нет, её должно задавать управляющее индикатором устройство.

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

CBF

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

Файл CBF содержит константу (_height), задающую высоту шрифта в пикселях, и два одномерных массива:

  • Массив позиций глифов (_position[])
  • Массив глифов (_bitmap[])

Высота шрифта кратна восьми пикселям.

Массив позиций нужен для сопоставления кода символа с расположением его глифа в массиве глифов. Если s — это код символа, то _position[s] — это начало глифа.

Массив глифов, кроме изображений символов, содержит ширину этих изображений. Ширина измеряется в пикселях.

Если base — это начало глифа, то:

  • _bitmap[base] — это ширина изображения
  • _bitmap[base + 1] — первый байт изображения
  • _bitmap[base + i] — i-тый байт изображения

Видеопамять контроллера устроена таким образом, что последовательное изъятие байтов из массива _bitmap[] и передача их индикатору, без всякого преобразования, постепенно формирует на индикаторе символ.

Код, выводящий символ «Щ» на индикатор:

int base = _position['Щ']; //Начало глифа символа Щ

int W = _bitmap[base]; //Ширина глифа в битах
int H = _height/8;     //Высота глифа в байтах

int i;
for (i = 1; i <= W*H; i++)
{
  uint8_t image = _bitmap[base + i]; //i-тый байт изображения симв.
  if (i == W+1) indicator_next_page(); // Установить след. страницу
  indicator_send(image);
}

bdftocbf

Для создания шрифтов я написал программу bdftocbf. Это программа преобразует шрифт в формате BDF в CBF.

Программа консольная и написана для работы под Линуксом.

Страница программы: http://github.com/bravikov/bdftocbf

Для создания шрифта BDF рекомендуется использовать программу FontForge.

Реклама

Автор

Дмитрий Бравиков

Инженер. Электронщик. Программист.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.