Инструменты пользователя

Инструменты сайта


subjects:programming:fnt:start

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
subjects:programming:fnt:start [2025/07/04 19:32]
создано
subjects:programming:fnt:start [2025/07/04 20:03] (текущий)
[Русские растровые шрифты с кодировкой WIN1251 размеры 8x8 и 8x16]
Строка 1: Строка 1:
 ====== FNT (old) ====== ====== FNT (old) ======
-<​del>​[[http://​electronics-and-mechanics.azm.su/​page59.html|Русские растровые шрифты с кодировкой WIN1251 размеры 8x8 и 8x16]]</​del>​+ 
 +===== page59 ===== 
 +Решил сохранить (''​2024-08-10''​) на будущее,​ т.к. похоже,​ что оригинал утрачен. 
 +Речь тут идёт о старой версии шрифта. Это очень простой формат,​ который использовался ещё во времена MS-DOS. 
 +==== Русские растровые шрифты с кодировкой WIN1251 размеры 8x8 и 8x16 ==== 
 +===  Как устроен растровый шрифт? === 
 + 
 +Растровый шрифт, это такой шрифт в котором каждый бит байта шрифта определяет какая точка должна быть закрашена а какая пуста, соответственно бит =1 точка закрашена,​ а бит =0 точка пуста. 
 + 
 +Поясню на примере,​ как устроен растровый шрифт. ​  
 +Скажем мы имеем байт со значением 126, в шестнадцатеричке это 7E, а в бинарке: ​  
 +''​01111110''​ 
 +Теперь представим что байт это линия на экране и там, где биты установлены в 1 там точки, а где 0 там фон. ​  
 +А теперь ход конём! ​  
 +Представим,​ что у нас 8 байт и тот самый (с значением 126) в серединке:​ 
 + 
 +<​code>​ 
 +00000000 
 +00111110 
 +01000010 
 +01000010 
 +01111110 
 +01000010 
 +01000010 
 +00000000 
 +</​code>​ 
 + 
 +Для наглядности заменю 1 на символ "''​@''"​ а нули на символ "''​_''": ​  
 + 
 +<​code>​ 
 +________ 
 +__@@@@@_ 
 +_@____@_ 
 +_@____@_ 
 +_@@@@@@_ 
 +_@____@_ 
 +_@____@_ 
 +________ 
 +</​code>​ 
 + 
 +Вот так, байт за байтом и составлены символы в растровом шрифте из отдельных пикселей. 
 + 
 +Естественно есть 2 варианта растровых шрифтов: ​  
 + 
 +  * горизонтальные (у которых байт определяет точки в одной горизонтальной линии); ​  
 +  * вертикальные (у которых байт определяет точки в одной вертикальной линии). ​  
 + 
 +Например,​ в MS-DOS шрифты горизонтальные,​ а для некоторых (если не для большинства) термопринтеров шрифты вертикальные. ​  
 +Растровые шрифты моноширные (ширина всех символов одинаковая),​ с одной стороны это плюс - легко вычислить где окажется тот или иной символ в выводе и можно даже картинки рисовать символами,​ а с другой минус - даже ради точки "​."​ приходится тратить поле 8х8 точек на устройстве вывода (на бумаге или дисплее). 
 + 
 +=== Плюсы и минусы растровых шрифтов. === 
 + 
 + 
 +  * + Для вывода текста растровым шрифтом требуется минимум вычислительной мощности. ​  
 +  * - Растровый шрифт не масштабируется. ​  
 + 
 +Есть и другие плюсы и минусы,​ но они проявляются в конкрытных задачах по разному. 
 + 
 +Так или иначе, в ряде случаев,​ например при работе с дисплеем от Nokia 3310 из микроконтроллера ATmega8 или при создании драйвера для не русифицированного китайского чекового принтера на который невозможно найти документацию,​ лучше всего подходит именно применение растрового шрифта. 
 + 
 +=== Русские растровые шрифты 8x8 и 8x16 с кодировкой WIN1251 === 
 + 
 +<del>Русские растровые шрифты 8x8 и 8x16 с кодировкой WIN1251</​del>​ 
 + 
 +=== Исходный код примера на C (си) для работы с растровым шрифтом === 
 + 
 + 
 +<code C> 
 +unsigned char MyFont[]; // сюда прежде нужно положить бинарные данные из шрифта 8x8 
 + 
 +void OutputStringToBufferType8x8(){ 
 +unsigned char MyString[]="​Алилуя!";​ 
 +unsigned char OuBuffer[7*8];​ // "​Алилуя!"​ - 7 символов,​ шрифт 8 байт (горизонтальных линий) на символ 
 +unsigned char n, m, offs, symb; 
 +unsigned char posou=0; 
 +for (n=0; n<250; n++){ 
 + symb=MyString[n];​ 
 + if (symb == 0){n=250;​}else{ 
 + offs=symb*8;​ // позиция откуда взять байты шрифта из которых будет сформирован символ 
 + for(m=0; m<8; m++){ 
 + OuBuffer[posou]=MyFont[offs];​ posou=posou+1;​ offs=offs+1;​ 
 + } // копируем 8 байт шрифта со смещения соответствующего коду символа в буфер вывода 
 +
 +
 +/* 
 +здесь можно уже выводить готовую строку нарисованную нашим шрифтом 
 +на устройство вывода. 
 +Для китайского термопринтера это было просто: 
 +нужно было лишь сунуть в COM порт команду "​печатай графическую строку"​ 
 +и загнять далее побайтно то, что надо напечатать в этой строке,​ 
 +то есть просто перегнать байты из OuBuffer в COM порт. 
 +Кстати,​ там шрифт был нужен перевёрнутый,​ то есть вертикальный,​ 
 +а в zip архиве я выкладываю горизонтальные. 
 +Перевернуть шрифт на 90 градусов просто,​ нужно лишь сделать процедуру:​ 
 +первый бит первого байта шрифта кладём в первый бит первого байта перевёртыша,​ 
 +второй бит первого байта шрифта кладём в первый бит второго байта перевёртыша,​ 
 +третий бит первого байта шрифта кладём в первый бит третьего байта перевёртыша,​ 
 +и так 8 раз, пока не заполним в перевертыше 8 байт, 
 +затем следующий символ 8x8 ... 
 +Естественно не надо переворачивать каждый раз при выводе символа,​ 
 +просто 1 раз перевернуть если надо и потом точно так же выводить 
 +текст перевертышем. 
 +*/ 
 +
 +</code> 
 + 
 +//Это весьма простой пример исходника,​ лишь показывающий что надо делать для вывода текста растровым шрифтом на дисплеи,​ принтеры и даже в bmp картинки.//​ 
 + 
 +==== Источники ==== 
 + 
 +  * Оригинал:​ <del>electronics-and-mechanics.azm.su/​page59.html</​del>​ © Русские растровые шрифты с кодировкой WIN1251 размеры 8x8 и 8x16. на Электроника и механика (записки от AZM) от AZM 
 +  * {{ :​subjects:​programming:​fnt:​f59-0.7z |f59-0.7z}} 
 +  * [[https://​forum.easyelectronics.ru/​viewtopic.php?​p=328796#​p328796|Копия 1 файла]]: md5: ''​3bd4658b3e59d6e97e73be7c755f0ce3''​
subjects/programming/fnt/start.1751646770.txt.gz · Последние изменения: 2025/07/04 19:32 —

На главную страницу Обучение Wikipedia Тестирование Контакты Нашли ошибку? Справка

Записаться на занятия

Ошибка Записаться на занятия к репетитору

Телефоны:

  • +7 (910) 874 73 73
  • +7 (905) 194 91 19
  • +7 (831) 247 47 55

Skype: eduVdom.com

закрыть[X]
Наши контакты