MAX7219 длина текста в пикселах

ckret
Offline
Зарегистрирован: 04.05.2018

Как можно рассчитать ширину текста в пикселах используемого шрифта?
String text = ("nop");    15 пикселей в ширину без учета межбуквенных пробелов
 

        MD_MAX72XX::fontType_t fontBG[] PROGMEM = {
        5, 0x7c, 0x08, 0x04, 0x04, 0x78,             // 110 - 'n'
        5, 0x38, 0x44, 0x44, 0x44, 0x38,             // 111 - 'o'
        5, 0xfc, 0x18, 0x24, 0x24, 0x18,             // 112 - 'p'

 

b707
Offline
Зарегистрирован: 26.05.2017

ckret пишет:

Как можно рассчитать ширину текста в пикселах используемого шрифта?

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

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

ckret
Offline
Зарегистрирован: 04.05.2018

К сожалению непропорциональный, так бы длину на пикселы перемножл и ЗБС. 
Не могу разобраться, как по символу вытащить длину из матрицы.

b707
Offline
Зарегистрирован: 26.05.2017

ckret пишет:

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

Вы разобрались, как закодированы буквы в шрифте? судя по вашему примеру, первая цифра "5" в каждой строке и есть ширина символа

ckret
Offline
Зарегистрирован: 04.05.2018

Не то, что разобрался, сам кодировал. 
Не пойму как  эту цифру достать у символа у 112 символа 'P'
 

b707
Offline
Зарегистрирован: 26.05.2017

ckret пишет:

Не пойму как  эту цифру достать у символа у 112 символа 'P'
 

посмотрите в коде, как достается сама буква , сделайте по аналогии

ckret
Offline
Зарегистрирован: 04.05.2018

Если пришел на форм спросить, наверно же смотрел. 
Не делать же механический перебор всех 111 символов, чтобы узнать длину 112.

b707
Offline
Зарегистрирован: 26.05.2017

ckret пишет:

Не делать же механический перебор всех 111 символов, чтобы узнать длину 112.

Если у фонта нет индекса, то только перебором и делать, другого пути нет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ckret пишет:

Если пришел на форм спросить, наверно же смотрел. 
Не делать же механический перебор всех 111 символов, чтобы узнать длину 112.

Вы хотите сказать, что для того чтобы добраться до буквы P там перебираются все предыдущие буквы?

Что ж это заформат шрифта такой?

ckret
Offline
Зарегистрирован: 04.05.2018

В библиотеке MAX72xx предложен один формат шрифта

MD_MAX72XX::fontType_t fontBG[] PROGMEM = {
5, 0x7c, 0x08, 0x04, 0x04, 0x78,             // 110 - 'n'
5, 0x38, 0x44, 0x44, 0x44, 0x38,             // 111 - 'o'
5, 0xfc, 0x18, 0x24, 0x24, 0x18,             // 112 - 'p'

 

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Вы хотите сказать, что для того чтобы добраться до буквы P там перебираются все предыдущие буквы?

Что ж это заформат шрифта такой?


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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:
если это пропорциональный шрифт без индекса, то
то это означает, что делал его (формат)  ... ну Вы примерно поняли кто.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

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