"Подрезать" шрифт

Slaxery
Offline
Зарегистрирован: 04.05.2019

Доброго времени суток

Ковыряю дисплей на ILI9341 через библиотеки от Adafruit и хочу сделать вывод цифр не стандартным шрифтом. Скачал нужный шрифт, по документации переконвертировал в формат Adafruit GFX и всё заработало. Однако, я не хочу хранить в памяти столько символов, так как нужны мне только цифры. В структуре со шрифтами комментариев нет. Пробовал удалить, смотря на глифы - получил горстку пикселей.

Собственно, вопрос. Как оставить в шрифте только цифры?

Сам код шрифта:

const uint8_t font12pt7bBitmaps[] PROGMEM = {
  0x7F, 0xFD, 0xFC, 0x3C, 0xCF, 0x3C, 0xF3, 0x33, 0x19, 0x8C, 0xD9, 0xBF,
  0xF9, 0x9B, 0x37, 0xFF, 0x33, 0x19, 0x80, 0x0C, 0x06, 0x00, 0x1F, 0xF8,
  0x06, 0x63, 0x31, 0x98, 0xCC, 0x40, 0x1F, 0xC0, 0x10, 0xD8, 0x6C, 0x36,
  0x03, 0x7F, 0xFF, 0xC0, 0x01, 0x80, 0xC0, 0xE8, 0xCF, 0x1B, 0x66, 0x78,
  0xCB, 0xB0, 0x06, 0x00, 0x80, 0x00, 0x08, 0x03, 0x00, 0x6E, 0x98, 0xF3,
  0x36, 0xC7, 0x98, 0xB8, 0x7C, 0x1F, 0xC6, 0x31, 0x8C, 0x63, 0x10, 0x47,
  0xE3, 0xF8, 0xC1, 0xB0, 0x6C, 0x1B, 0x06, 0xC1, 0x9F, 0xE7, 0xFC, 0x06,
  0x00, 0x80, 0xFF, 0x39, 0xF1, 0x8C, 0x63, 0x10, 0x06, 0x31, 0x8C, 0x61,
  0xE7, 0xF3, 0xC0, 0xC3, 0x0C, 0x30, 0xC1, 0x00, 0x30, 0xC3, 0x0C, 0x3F,
  0xBC, 0x18, 0x18, 0xFF, 0x7E, 0x7E, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x7E,
  0x7E, 0x18, 0x18, 0x18, 0xFF, 0x80, 0xFF, 0xFC, 0xF0, 0x01, 0x80, 0xC0,
  0xC0, 0x60, 0x60, 0x30, 0x10, 0x00, 0x10, 0x18, 0x0C, 0x0E, 0x06, 0x07,
  0x03, 0x00, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x80,
  0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFE, 0xFC, 0x7F, 0xFC, 0xFF, 0xF4,
  0xFE, 0x3F, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7D, 0xBE, 0x60, 0x30,
  0x18, 0x0C, 0x06, 0x01, 0xFC, 0xFE, 0xFE, 0x7F, 0xC0, 0x60, 0x30, 0x18,
  0x0C, 0x06, 0xFD, 0x7E, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xFF, 0xFC,
  0x00, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0xFE, 0x7C, 0x01, 0x80, 0xC0,
  0x60, 0x30, 0x18, 0x0C, 0x02, 0xFF, 0x3F, 0xB0, 0x18, 0x0C, 0x06, 0x03,
  0x01, 0x7C, 0x3E, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFC, 0xFF,
  0x3F, 0xB0, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x7C, 0xBE, 0xE0, 0xF0, 0x78,
  0x3C, 0x1E, 0x0D, 0xFE, 0xFC, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F,
  0x07, 0x01, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x01, 0xFE,
  0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0xBE, 0xE0, 0xF0, 0x78,
  0x3C, 0x1E, 0x0D, 0xFE, 0xFC, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F,
  0x07, 0x7D, 0x3E, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFC, 0xF0,
  0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x0C, 0x63, 0x18, 0x01, 0x83, 0x06,
  0x0C, 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0xC1, 0x83, 0x06, 0x00, 0x63, 0x18,
  0xC0, 0xFE, 0x3F, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7D, 0x3E, 0x60,
  0x30, 0x18, 0x0C, 0x00, 0x03, 0x01, 0x80, 0xFE, 0x7F, 0xF0, 0x78, 0x3C,
  0xFE, 0x7F, 0x37, 0x11, 0x80, 0x64, 0xF3, 0x79, 0xFC, 0xE6, 0x01, 0xF8,
  0xFC, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60,
  0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0xFF, 0x3F, 0xB0, 0x78, 0x3C,
  0x1E, 0x0F, 0x07, 0x7D, 0xBE, 0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFD,
  0xFE, 0xFF, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0xC0, 0xC0,
  0xC0, 0xC0, 0xC0, 0x7F, 0x7F, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E, 0x0F,
  0x07, 0x01, 0x80, 0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFD, 0xFE, 0xFF,
  0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0,
  0xC0, 0x7F, 0x7F, 0xFF, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x3F,
  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0xFF, 0x3F, 0xB0, 0x18, 0x0C,
  0x06, 0x03, 0x01, 0x0C, 0x86, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFE,
  0xFC, 0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7C, 0xC1, 0xE0,
  0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x02, 0x7F, 0xFC, 0xFF, 0xF4, 0x00, 0x80,
  0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0x01, 0xC1, 0xE0, 0xF0, 0x78, 0x3C,
  0x1B, 0xFD, 0xF8, 0x83, 0xE3, 0xB3, 0x9B, 0x8F, 0x87, 0x83, 0xF8, 0x7C,
  0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x02, 0x80, 0x60, 0x30, 0x18,
  0x0C, 0x06, 0x03, 0x01, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0xFC,
  0xFE, 0xFF, 0x1F, 0xFC, 0x0F, 0x33, 0xCC, 0xF3, 0x3C, 0xCE, 0x31, 0x00,
  0x30, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0x80, 0xE0, 0xFC,
  0x7B, 0x3C, 0xDE, 0x3F, 0x06, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
  0x0E, 0x02, 0x3E, 0x1F, 0x30, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x00,
  0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFC, 0x7C, 0xFF, 0x3F, 0xB0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03,
  0x01, 0x00, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x80,
  0x60, 0xF0, 0x78, 0x3C, 0x7E, 0x3D, 0xFE, 0xFF, 0xFE, 0x3F, 0xF0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x3C, 0x1F, 0x0D, 0xC6, 0x73,
  0x1D, 0x07, 0xFF, 0xBF, 0xB0, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x7C, 0x3E,
  0x80, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFC, 0xFF, 0xBF, 0x80, 0x01,
  0x80, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60,
  0x30, 0x08, 0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x07, 0x01, 0xC1,
  0xE0, 0xF0, 0x78, 0x3C, 0x1B, 0xFD, 0xF8, 0x80, 0xE0, 0xF0, 0x78, 0x3C,
  0x1E, 0x0F, 0x06, 0x00, 0x80, 0xE0, 0xD8, 0xC6, 0xC3, 0x60, 0xA0, 0x00,
  0x80, 0x70, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0xCC, 0xF3,
  0x3C, 0xCF, 0x33, 0xCC, 0xDF, 0xFF, 0xF0, 0xC1, 0xE0, 0xD8, 0xCC, 0x63,
  0x61, 0xB0, 0x50, 0x00, 0x14, 0x1B, 0x0D, 0x8C, 0x66, 0x36, 0x0F, 0x06,
  0x00, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7D, 0x01, 0x80, 0xC0,
  0x60, 0x30, 0x1B, 0xFF, 0xF8, 0xFF, 0xBE, 0xC0, 0xC0, 0x60, 0x60, 0x30,
  0x10, 0x00, 0x00, 0x0C, 0x0C, 0x06, 0x06, 0x03, 0x03, 0xFD, 0xFE, 0xFB,
  0xB1, 0x8C, 0x63, 0x10, 0x86, 0x31, 0x8C, 0x61, 0xDF, 0xC0, 0x70, 0x18,
  0x0C, 0x03, 0x01, 0x80, 0x40, 0x00, 0x04, 0x03, 0x01, 0x80, 0x60, 0x30,
  0x0C, 0x06, 0xEB, 0xC6, 0x31, 0x8C, 0x60, 0x18, 0xC6, 0x31, 0xBF, 0xA0,
  0x18, 0x0A, 0x1D, 0xDC, 0x7C, 0x08, 0x7F, 0x7F, 0xC0, 0xC6, 0x31, 0xFE,
  0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0xF0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x01, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E, 0x0F,
  0x07, 0x7D, 0xBE, 0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFD, 0xFE, 0xFF,
  0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0,
  0xC0, 0x7F, 0x7F, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01,
  0x80, 0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFD, 0xFE, 0xFF, 0x7F, 0xC0,
  0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7F,
  0x7F, 0xFF, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x3F, 0xC0, 0xC0,
  0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0xFF, 0x3F, 0xB0, 0x18, 0x0C, 0x06, 0x03,
  0x01, 0x0C, 0x86, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFE, 0xFC, 0xC0,
  0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7C, 0xC1, 0xE0, 0xF0, 0x78,
  0x3C, 0x1E, 0x0E, 0x02, 0x7F, 0xFC, 0xFF, 0xF4, 0x00, 0x80, 0xC0, 0x60,
  0x30, 0x18, 0x0C, 0x07, 0x01, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1B, 0xFD,
  0xF8, 0x83, 0xE3, 0xB3, 0x9B, 0x8F, 0x87, 0x83, 0xF8, 0x7C, 0xC1, 0xE0,
  0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x02, 0x80, 0x60, 0x30, 0x18, 0x0C, 0x06,
  0x03, 0x01, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0xFC, 0xFE, 0xFF,
  0x1F, 0xFC, 0x0F, 0x33, 0xCC, 0xF3, 0x3C, 0xCE, 0x31, 0x00, 0x30, 0x3C,
  0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0x80, 0xE0, 0xFC, 0x7B, 0x3C,
  0xDE, 0x3F, 0x06, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x02,
  0x3E, 0x1F, 0x30, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x00, 0x60, 0xF0,
  0x78, 0x3C, 0x1E, 0x0D, 0xFC, 0x7C, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E,
  0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00,
  0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x80, 0x60, 0xF0,
  0x78, 0x3C, 0x7E, 0x3D, 0xFE, 0xFF, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E,
  0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x3C, 0x1F, 0x0D, 0xC6, 0x73, 0x1D, 0x07,
  0xFF, 0xBF, 0xB0, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x7C, 0x3E, 0x80, 0xC0,
  0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFC, 0xFF, 0xBF, 0x80, 0x01, 0x80, 0xC0,
  0x60, 0x30, 0x18, 0x00, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x08,
  0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x07, 0x01, 0xC1, 0xE0, 0xF0,
  0x78, 0x3C, 0x1B, 0xFD, 0xF8, 0x80, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F,
  0x06, 0x00, 0x80, 0xE0, 0xD8, 0xC6, 0xC3, 0x60, 0xA0, 0x00, 0x80, 0x70,
  0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0xCC, 0xF3, 0x3C, 0xCF,
  0x33, 0xCC, 0xDF, 0xFF, 0xF0, 0xC1, 0xE0, 0xD8, 0xCC, 0x63, 0x61, 0xB0,
  0x50, 0x00, 0x14, 0x1B, 0x0D, 0x8C, 0x66, 0x36, 0x0F, 0x06, 0x00, 0xE0,
  0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7D, 0x01, 0x80, 0xC0, 0x60, 0x30,
  0x1B, 0xFF, 0xF8, 0xFF, 0xBE, 0xC0, 0xC0, 0x60, 0x60, 0x30, 0x10, 0x00,
  0x00, 0x0C, 0x0C, 0x06, 0x06, 0x03, 0x03, 0xFD, 0xFE, 0x1E, 0x38, 0xC1,
  0x83, 0x06, 0x0C, 0x78, 0xF0, 0x60, 0xC1, 0x83, 0x06, 0x07, 0x0F, 0x7F,
  0xFF, 0xFF, 0xF4, 0xF0, 0xE0, 0x60, 0xC1, 0x83, 0x06, 0x0F, 0x1E, 0x30,
  0x60, 0xC1, 0x83, 0x1C, 0x78, 0x30, 0x18, 0x33, 0x79, 0xF0, 0x20 };

const GFXglyph font12pt7bGlyphs[] PROGMEM = {
  {     0,   0,   0,   7,    0,    1 },   // 0x20 ' '
  {     0,   2,  15,   4,    1,  -14 },   // 0x21 '!'
  {     4,   6,   4,   7,    1,  -14 },   // 0x22 '"'
  {     7,   9,  10,  12,    1,  -12 },   // 0x23 '#'
  {    19,   9,  21,  11,    1,  -17 },   // 0x24 '$'
  {    43,  11,  15,  13,    1,  -14 },   // 0x25 '%'
  {    64,  10,  17,  12,    1,  -14 },   // 0x26 '&'
  {    86,   2,   4,   4,    1,  -14 },   // 0x27 '''
  {    87,   5,  16,   8,    1,  -15 },   // 0x28 '('
  {    97,   6,  16,   8,    1,  -15 },   // 0x29 ')'
  {   109,   8,   8,   9,    1,  -11 },   // 0x2A '*'
  {   117,   8,   7,  10,    1,  -10 },   // 0x2B '+'
  {   124,   2,   5,   4,    1,   -1 },   // 0x2C ','
  {   126,   7,   2,  10,    1,   -8 },   // 0x2D '-'
  {   128,   2,   2,   4,    1,   -1 },   // 0x2E '.'
  {   129,   9,  15,  11,    1,  -14 },   // 0x2F '/'
  {   146,   9,  16,  11,    1,  -15 },   // 0x30 '0'
  {   164,   2,  15,   4,    1,  -14 },   // 0x31 '1'
  {   168,   9,  16,  11,    1,  -15 },   // 0x32 '2'
  {   186,   9,  16,  11,    1,  -15 },   // 0x33 '3'
  {   204,   9,  15,  11,    1,  -14 },   // 0x34 '4'
  {   221,   9,  16,  11,    1,  -15 },   // 0x35 '5'
  {   239,   9,  16,  11,    1,  -15 },   // 0x36 '6'
  {   257,   9,  16,  11,    1,  -15 },   // 0x37 '7'
  {   275,   9,  16,  11,    1,  -15 },   // 0x38 '8'
  {   293,   9,  16,  11,    1,  -15 },   // 0x39 '9'
  {   311,   2,  12,   4,    1,  -11 },   // 0x3A ':'
  {   314,   2,  15,   4,    1,  -11 },   // 0x3B ';'
  {   318,   6,   9,   8,    1,  -11 },   // 0x3C '<'
  {   325,   7,   5,  10,    1,   -9 },   // 0x3D '='
  {   330,   6,   9,   8,    1,  -11 },   // 0x3E '>'
  {   337,   9,  16,  11,    1,  -15 },   // 0x3F '?'
  {   355,   9,  16,  11,    1,  -15 },   // 0x40 '@'
  {   373,   9,  16,  11,    1,  -15 },   // 0x41 'A'
  {   391,   9,  16,  11,    1,  -15 },   // 0x42 'B'
  {   409,   8,  16,  10,    1,  -15 },   // 0x43 'C'
  {   425,   9,  16,  11,    1,  -15 },   // 0x44 'D'
  {   443,   8,  16,  10,    1,  -15 },   // 0x45 'E'
  {   459,   8,  16,  10,    1,  -15 },   // 0x46 'F'
  {   475,   9,  16,  11,    1,  -15 },   // 0x47 'G'
  {   493,   9,  15,  11,    1,  -14 },   // 0x48 'H'
  {   510,   2,  15,   4,    1,  -14 },   // 0x49 'I'
  {   514,   9,  15,  11,    1,  -14 },   // 0x4A 'J'
  {   531,   9,  15,  11,    1,  -14 },   // 0x4B 'K'
  {   548,   9,  15,  11,    1,  -14 },   // 0x4C 'L'
  {   565,  10,  16,  11,    1,  -15 },   // 0x4D 'M'
  {   585,   9,  15,  11,    1,  -14 },   // 0x4E 'N'
  {   602,   9,  16,  11,    1,  -15 },   // 0x4F 'O'
  {   620,   9,  16,  11,    1,  -15 },   // 0x50 'P'
  {   638,   9,  16,  12,    1,  -15 },   // 0x51 'Q'
  {   656,   9,  16,  11,    1,  -15 },   // 0x52 'R'
  {   674,   9,  16,  11,    1,  -15 },   // 0x53 'S'
  {   692,   9,  16,  11,    1,  -15 },   // 0x54 'T'
  {   710,   9,  15,  11,    1,  -14 },   // 0x55 'U'
  {   727,   9,  15,  11,    1,  -14 },   // 0x56 'V'
  {   744,  10,  15,  11,    1,  -14 },   // 0x57 'W'
  {   763,   9,  15,  11,    1,  -14 },   // 0x58 'X'
  {   780,   9,  15,  11,    1,  -14 },   // 0x59 'Y'
  {   797,   9,  16,  11,    1,  -15 },   // 0x5A 'Z'
  {   815,   5,  16,   7,    1,  -15 },   // 0x5B '['
  {   825,   9,  15,  11,    1,  -14 },   // 0x5C '\'
  {   842,   5,  15,   7,    1,  -14 },   // 0x5D ']'
  {   852,   9,   5,  11,    1,  -14 },   // 0x5E '^'
  {   858,   9,   2,  11,    1,   -1 },   // 0x5F '_'
  {   861,   4,   4,   6,    1,  -15 },   // 0x60 '`'
  {   863,   9,  16,  11,    1,  -15 },   // 0x61 'a'
  {   881,   9,  16,  11,    1,  -15 },   // 0x62 'b'
  {   899,   8,  16,  10,    1,  -15 },   // 0x63 'c'
  {   915,   9,  16,  11,    1,  -15 },   // 0x64 'd'
  {   933,   8,  16,  10,    1,  -15 },   // 0x65 'e'
  {   949,   8,  16,  10,    1,  -15 },   // 0x66 'f'
  {   965,   9,  16,  11,    1,  -15 },   // 0x67 'g'
  {   983,   9,  15,  11,    1,  -14 },   // 0x68 'h'
  {  1000,   2,  15,   4,    1,  -14 },   // 0x69 'i'
  {  1004,   9,  15,  11,    1,  -14 },   // 0x6A 'j'
  {  1021,   9,  15,  11,    1,  -14 },   // 0x6B 'k'
  {  1038,   9,  15,  11,    1,  -14 },   // 0x6C 'l'
  {  1055,  10,  16,  11,    1,  -15 },   // 0x6D 'm'
  {  1075,   9,  15,  11,    1,  -14 },   // 0x6E 'n'
  {  1092,   9,  16,  11,    1,  -15 },   // 0x6F 'o'
  {  1110,   9,  16,  11,    1,  -15 },   // 0x70 'p'
  {  1128,   9,  16,  12,    1,  -15 },   // 0x71 'q'
  {  1146,   9,  16,  11,    1,  -15 },   // 0x72 'r'
  {  1164,   9,  16,  11,    1,  -15 },   // 0x73 's'
  {  1182,   9,  16,  11,    1,  -15 },   // 0x74 't'
  {  1200,   9,  15,  11,    1,  -14 },   // 0x75 'u'
  {  1217,   9,  15,  11,    1,  -14 },   // 0x76 'v'
  {  1234,  10,  15,  11,    1,  -14 },   // 0x77 'w'
  {  1253,   9,  15,  11,    1,  -14 },   // 0x78 'x'
  {  1270,   9,  15,  11,    1,  -14 },   // 0x79 'y'
  {  1287,   9,  16,  11,    1,  -15 },   // 0x7A 'z'
  {  1305,   7,  16,   9,    1,  -15 },   // 0x7B '{'
  {  1319,   2,  15,   4,    1,  -14 },   // 0x7C '|'
  {  1323,   7,  16,   9,    1,  -15 },   // 0x7D '}'
  {  1337,   9,   5,  12,    1,  -11 } }; // 0x7E '~'

const GFXfont font12pt7b PROGMEM = {
  (uint8_t  *)font12pt7bBitmaps,
  (GFXglyph *)font12pt7bGlyphs,
  0x20, 0x7E, 13 };

// Approx. 2015 bytes

 

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

 Так по таблице кодировки ANSI посмотри ... и выбрось лишние.

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

Боюсь, что без корректировки кодов библиотеки - никак.

Slaxery
Offline
Зарегистрирован: 04.05.2019

Попробовал отрезать лишнее в соответствии с таблицей. В итоге - куча прямоугольников и каша из пикселей:

Ну и сам шрифт:

const uint8_t font12pt7bBitmaps[] PROGMEM = {
  0x0C, 0x06, 0x03, 0x01, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0xFC,
  0xFE, 0xFF, 0x1F, 0xFC, 0x0F, 0x33, 0xCC, 0xF3, 0x3C, 0xCE, 0x31, 0x00,
  0x30, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0x80, 0xE0, 0xFC,
  0x7B, 0x3C, 0xDE, 0x3F, 0x06, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
  0x0E, 0x02, 0x3E, 0x1F, 0x30, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x00,
  0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFC, 0x7C, 0xFF, 0x3F, 0xB0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03,
  0x01, 0x00, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x80,
  0x60, 0xF0, 0x78, 0x3C, 0x7E, 0x3D, 0xFE, 0xFF, 0xFE, 0x3F, 0xF0, 0x78,
  };

const GFXglyph font12pt7bGlyphs[] PROGMEM = {
  {   146,   9,  16,  11,    1,  -15 },   // 0x30 '0'
  {   164,   2,  15,   4,    1,  -14 },   // 0x31 '1'
  {   168,   9,  16,  11,    1,  -15 },   // 0x32 '2'
  {   186,   9,  16,  11,    1,  -15 },   // 0x33 '3'
  {   204,   9,  15,  11,    1,  -14 },   // 0x34 '4'
  {   221,   9,  16,  11,    1,  -15 },   // 0x35 '5'
  {   239,   9,  16,  11,    1,  -15 },   // 0x36 '6'
  {   257,   9,  16,  11,    1,  -15 },   // 0x37 '7'
  {   275,   9,  16,  11,    1,  -15 },   // 0x38 '8'
  {   293,   9,  16,  11,    1,  -15 }   // 0x39 '9'
 }; 

const GFXfont font12pt7b PROGMEM = {
  (uint8_t  *)font12pt7bBitmaps,
  (GFXglyph *)font12pt7bGlyphs,
  0x20, 0x7E, 13 };

// Approx. 2015 bytes

Вопрос конечно глупый, но что я делаю не так?

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

Slaxery пишет:

Вопрос конечно глупый, но что я делаю не так?

Не изменяете код библиотеки.

Она (библиотека) ожидает, что самый младший символ (код) шрифта - проблел (0x20). Поэтому, из символа, который надо выводить, вычитает 0x20 и и спользует результат в качестве индекса в массиве-шрифте. А Вы часть массива отрезали и самый младший код у Вас '0' (0x30). Вот она и вылетает хрен знает куда.

Попробуйте вывести пробел. Если выведется '0', значит всё так и есть. Если нет - значит, там всё хитрее и надо искать.

Slaxery
Offline
Зарегистрирован: 04.05.2019

При выводе пробела выдает это (то, что красным):

mykaida
mykaida аватар
Онлайн
Зарегистрирован: 12.07.2018

Смените библиотеку. Энта очень ресурсоемкая.

Slaxery
Offline
Зарегистрирован: 04.05.2019

А кроме этой какая-то из еще поддерживает аппаратный SPI? А то, выбирал ее именно из-за этого

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Slaxery пишет:
Ковыряю дисплей на ILI9341 через библиотеки от Adafruit и хочу сделать вывод цифр не стандартным шрифтом. Скачал нужный шрифт, по документации переконвертировал в формат Adafruit GFX и всё заработало.
Не плохо былоб ссылку на библиотеку и версию, по косвенным признакам возможно это Adafruit-GFX-Library и наверно крайняя версия.
Структура глифа декларирована как

/// Font data stored PER GLYPH
typedef struct {
  uint16_t bitmapOffset;     ///< Pointer into GFXfont->bitmap
  uint8_t  width;            ///< Bitmap dimensions in pixels
  uint8_t  height;           ///< Bitmap dimensions in pixels
  uint8_t  xAdvance;         ///< Distance to advance cursor (x axis)
  int8_t   xOffset;          ///< X dist from cursor pos to UL corner
  int8_t   yOffset;          ///< Y dist from cursor pos to UL corner
} GFXglyph;

Вы отгрызли начало в битмапах, а смещение битмапов в глифах оставили прежнее.

const GFXglyph font12pt7bGlyphs[] PROGMEM = {
  {   146,   9,  16,  11,    1,  -15 },   // 0x30 '0'
  {   164,   2,  15,   4,    1,  -14 },   // 0x31 '1'
  {   168,   9,  16,  11,    1,  -15 },   // 0x32 '2'
  {   186,   9,  16,  11,    1,  -15 },   // 0x33 '3'
  {   204,   9,  15,  11,    1,  -14 },   // 0x34 '4'
  {   221,   9,  16,  11,    1,  -15 },   // 0x35 '5'
  {   239,   9,  16,  11,    1,  -15 },   // 0x36 '6'
  {   257,   9,  16,  11,    1,  -15 },   // 0x37 '7'
  {   275,   9,  16,  11,    1,  -15 },   // 0x38 '8'
  {   293,   9,  16,  11,    1,  -15 }   // 0x39 '9'
 };

Кроме этого в структуре описывающей фонт

 

/// Data stored for FONT AS A WHOLE
typedef struct { 
  uint8_t  *bitmap;      ///< Glyph bitmaps, concatenated
  GFXglyph *glyph;       ///< Glyph array
  uint8_t   first;       ///< ASCII extents (first char)
  uint8_t   last;        ///< ASCII extents (last char)
  uint8_t   yAdvance;    ///< Newline distance (y axis)
} GFXfont;

Говорите что для этого фонта набор символов по прежнему от 0x20 до 0x7E

const GFXfont font12pt7b PROGMEM = {
  (uint8_t  *)font12pt7bBitmaps,
  (GFXglyph *)font12pt7bGlyphs,
  0x20, 0x7E, 13 };

П.С.
Смещение для символа '0' в не обрезанных битмапах 146, после того как вы обрезали начало, битмап для '0' неузнать.

Slaxery
Offline
Зарегистрирован: 04.05.2019

Да, библиотека Adafruit-GFX самой последней версии

А как узнать это самое смещение? Оригинальный шрифт остался, могу тоже сбросить

Попробовал на не отредактированном шрифте отрезать начало и указать в константе с 0x30 до 0x39 - выбило это:

Мои "исправления":

const uint8_t font12pt7bBitmaps[] PROGMEM = {
  0xFE, 0xFF, 0x1F, 0xFC, 0x0F, 0x33, 0xCC, 0xF3, 0x3C, 0xCE, 0x31, 0x00,
  0x30, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0x80, 0xE0, 0xFC,
  0x7B, 0x3C, 0xDE, 0x3F, 0x06, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
  0x0E, 0x02, 0x3E, 0x1F, 0x30, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x00,
  0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFC, 0x7C, 0xFF, 0x3F, 0xB0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03,
  0x01, 0x00, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x80,
  0x60, 0xF0, 0x78, 0x3C, 0x7E, 0x3D, 0xFE, 0xFF, 0xFE, 0x3F, 0xF0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x3C, 0x1F, 0x0D, 0xC6, 0x73,
  0x1D, 0x07, 0xFF, 0xBF, 0xB0, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x7C, 0x3E,
  0x80, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFC, 0xFF, 0xBF, 0x80, 0x01,
  0x80, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60,
  0x30, 0x08, 0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x07, 0x01, 0xC1,
  0xE0, 0xF0, 0x78, 0x3C, 0x1B, 0xFD, 0xF8, 0x80, 0xE0, 0xF0, 0x78, 0x3C,
  0x1E, 0x0F, 0x06, 0x00, 0x80, 0xE0, 0xD8, 0xC6, 0xC3, 0x60, 0xA0, 0x00,
  0x80, 0x70, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0xCC, 0xF3,
  0x3C, 0xCF, 0x33, 0xCC, 0xDF, 0xFF, 0xF0, 0xC1, 0xE0, 0xD8, 0xCC, 0x63,
  0x61, 0xB0, 0x50, 0x00, 0x14, 0x1B, 0x0D, 0x8C, 0x66, 0x36, 0x0F, 0x06,
  0x00, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7D, 0x01, 0x80, 0xC0,
  0x60, 0x30, 0x1B, 0xFF, 0xF8, 0xFF, 0xBE, 0xC0, 0xC0, 0x60, 0x60, 0x30,
  0x10, 0x00, 0x00, 0x0C, 0x0C, 0x06, 0x06, 0x03, 0x03, 0xFD, 0xFE, 0xFB,
  0xB1, 0x8C, 0x63, 0x10, 0x86, 0x31, 0x8C, 0x61, 0xDF, 0xC0, 0x70, 0x18,
  0x0C, 0x03, 0x01, 0x80, 0x40, 0x00, 0x04, 0x03, 0x01, 0x80, 0x60, 0x30,
  0x0C, 0x06, 0xEB, 0xC6, 0x31, 0x8C, 0x60, 0x18, 0xC6, 0x31, 0xBF, 0xA0,
  0x18, 0x0A, 0x1D, 0xDC, 0x7C, 0x08, 0x7F, 0x7F, 0xC0, 0xC6, 0x31, 0xFE,
  0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x7D, 0x3E, 0x60, 0xF0, 0x78,
  0x3C, 0x1E, 0x0F, 0x07, 0x01, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E, 0x0F,
  0x07, 0x7D, 0xBE, 0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFD, 0xFE, 0xFF,
  0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0,
  0xC0, 0x7F, 0x7F, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01,
  0x80, 0x60, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFD, 0xFE, 0xFF, 0x7F, 0xC0,
  0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7F,
  0x7F, 0xFF, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x3F, 0xC0, 0xC0,
  0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0xFF, 0x3F, 0xB0, 0x18, 0x0C, 0x06, 0x03,
  0x01, 0x0C, 0x86, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0D, 0xFE, 0xFC, 0xC0,
  0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7C, 0xC1, 0xE0, 0xF0, 0x78,
  0x3C, 0x1E, 0x0E, 0x02, 0x7F, 0xFC, 0xFF, 0xF4, 0x00, 0x80, 0xC0, 0x60,
  0x30, 0x18, 0x0C, 0x07, 0x01, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1B, 0xFD,
  0xF8, 0x83, 0xE3, 0xB3, 0x9B, 0x8F, 0x87, 0x83, 0xF8, 0x7C, 0xC1, 0xE0,
  0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x02, 0x80, 0x60, 0x30, 0x18, 0x0C, 0x06,
  0x03, 0x01, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0xFC, 0xFE, 0xFF,
  0x1F, 0xFC, 0x0F, 0x33, 0xCC, 0xF3, 0x3C, 0xCE, 0x31, 0x00, 0x30, 0x3C,
  0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0x80, 0xE0, 0xFC, 0x7B, 0x3C,
  0xDE, 0x3F, 0x06, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x02,
  0x3E, 0x1F, 0x30, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x00, 0x60, 0xF0,
  0x78, 0x3C, 0x1E, 0x0D, 0xFC, 0x7C, 0xFF, 0x3F, 0xB0, 0x78, 0x3C, 0x1E,
  0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00,
  0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x01, 0x80, 0x60, 0xF0,
  0x78, 0x3C, 0x7E, 0x3D, 0xFE, 0xFF, 0xFE, 0x3F, 0xF0, 0x78, 0x3C, 0x1E,
  0x0F, 0x07, 0x7D, 0x3E, 0x60, 0x3C, 0x1F, 0x0D, 0xC6, 0x73, 0x1D, 0x07,
  0xFF, 0xBF, 0xB0, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x7C, 0x3E, 0x80, 0xC0,
  0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFC, 0xFF, 0xBF, 0x80, 0x01, 0x80, 0xC0,
  0x60, 0x30, 0x18, 0x00, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x08,
  0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0x07, 0x01, 0xC1, 0xE0, 0xF0,
  0x78, 0x3C, 0x1B, 0xFD, 0xF8, 0x80, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F,
  0x06, 0x00, 0x80, 0xE0, 0xD8, 0xC6, 0xC3, 0x60, 0xA0, 0x00, 0x80, 0x70,
  0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x01, 0xCC, 0xF3, 0x3C, 0xCF,
  0x33, 0xCC, 0xDF, 0xFF, 0xF0, 0xC1, 0xE0, 0xD8, 0xCC, 0x63, 0x61, 0xB0,
  0x50, 0x00, 0x14, 0x1B, 0x0D, 0x8C, 0x66, 0x36, 0x0F, 0x06, 0x00, 0xE0,
  0xF0, 0x78, 0x3C, 0x1E, 0x0E, 0xFE, 0x7D, 0x01, 0x80, 0xC0, 0x60, 0x30,
  0x1B, 0xFF, 0xF8, 0xFF, 0xBE, 0xC0, 0xC0, 0x60, 0x60, 0x30, 0x10, 0x00,
  0x00, 0x0C, 0x0C, 0x06, 0x06, 0x03, 0x03, 0xFD, 0xFE, 0x1E, 0x38, 0xC1,
  0x83, 0x06, 0x0C, 0x78, 0xF0, 0x60, 0xC1, 0x83, 0x06, 0x07, 0x0F, 0x7F,
  0xFF, 0xFF, 0xF4, 0xF0, 0xE0, 0x60, 0xC1, 0x83, 0x06, 0x0F, 0x1E, 0x30,
  0x60, 0xC1, 0x83, 0x1C, 0x78, 0x30, 0x18, 0x33, 0x79, 0xF0, 0x20 };

const GFXglyph font12pt7bGlyphs[] PROGMEM = {
  {     0,   0,   0,   7,    0,    1 },   // 0x20 ' '
  {     0,   2,  15,   4,    1,  -14 },   // 0x21 '!'
  {     4,   6,   4,   7,    1,  -14 },   // 0x22 '"'
  {     7,   9,  10,  12,    1,  -12 },   // 0x23 '#'
  {    19,   9,  21,  11,    1,  -17 },   // 0x24 '$'
  {    43,  11,  15,  13,    1,  -14 },   // 0x25 '%'
  {    64,  10,  17,  12,    1,  -14 },   // 0x26 '&'
  {    86,   2,   4,   4,    1,  -14 },   // 0x27 '''
  {    87,   5,  16,   8,    1,  -15 },   // 0x28 '('
  {    97,   6,  16,   8,    1,  -15 },   // 0x29 ')'
  {   109,   8,   8,   9,    1,  -11 },   // 0x2A '*'
  {   117,   8,   7,  10,    1,  -10 },   // 0x2B '+'
  {   124,   2,   5,   4,    1,   -1 },   // 0x2C ','
  {   126,   7,   2,  10,    1,   -8 },   // 0x2D '-'
  {   128,   2,   2,   4,    1,   -1 },   // 0x2E '.'
  {   129,   9,  15,  11,    1,  -14 },   // 0x2F '/'
  {   146,   9,  16,  11,    1,  -15 },   // 0x30 '0'
  {   164,   2,  15,   4,    1,  -14 },   // 0x31 '1'
  {   168,   9,  16,  11,    1,  -15 },   // 0x32 '2'
  {   186,   9,  16,  11,    1,  -15 },   // 0x33 '3'
  {   204,   9,  15,  11,    1,  -14 },   // 0x34 '4'
  {   221,   9,  16,  11,    1,  -15 },   // 0x35 '5'
  {   239,   9,  16,  11,    1,  -15 },   // 0x36 '6'
  {   257,   9,  16,  11,    1,  -15 },   // 0x37 '7'
  {   275,   9,  16,  11,    1,  -15 },   // 0x38 '8'
  {   293,   9,  16,  11,    1,  -15 },   // 0x39 '9'
  {   311,   2,  12,   4,    1,  -11 },   // 0x3A ':'
  {   314,   2,  15,   4,    1,  -11 },   // 0x3B ';'
  {   318,   6,   9,   8,    1,  -11 },   // 0x3C '<'
  {   325,   7,   5,  10,    1,   -9 },   // 0x3D '='
  {   330,   6,   9,   8,    1,  -11 },   // 0x3E '>'
  {   337,   9,  16,  11,    1,  -15 },   // 0x3F '?'
  {   355,   9,  16,  11,    1,  -15 },   // 0x40 '@'
  {   373,   9,  16,  11,    1,  -15 },   // 0x41 'A'
  {   391,   9,  16,  11,    1,  -15 },   // 0x42 'B'
  {   409,   8,  16,  10,    1,  -15 },   // 0x43 'C'
  {   425,   9,  16,  11,    1,  -15 },   // 0x44 'D'
  {   443,   8,  16,  10,    1,  -15 },   // 0x45 'E'
  {   459,   8,  16,  10,    1,  -15 },   // 0x46 'F'
  {   475,   9,  16,  11,    1,  -15 },   // 0x47 'G'
  {   493,   9,  15,  11,    1,  -14 },   // 0x48 'H'
  {   510,   2,  15,   4,    1,  -14 },   // 0x49 'I'
  {   514,   9,  15,  11,    1,  -14 },   // 0x4A 'J'
  {   531,   9,  15,  11,    1,  -14 },   // 0x4B 'K'
  {   548,   9,  15,  11,    1,  -14 },   // 0x4C 'L'
  {   565,  10,  16,  11,    1,  -15 },   // 0x4D 'M'
  {   585,   9,  15,  11,    1,  -14 },   // 0x4E 'N'
  {   602,   9,  16,  11,    1,  -15 },   // 0x4F 'O'
  {   620,   9,  16,  11,    1,  -15 },   // 0x50 'P'
  {   638,   9,  16,  12,    1,  -15 },   // 0x51 'Q'
  {   656,   9,  16,  11,    1,  -15 },   // 0x52 'R'
  {   674,   9,  16,  11,    1,  -15 },   // 0x53 'S'
  {   692,   9,  16,  11,    1,  -15 },   // 0x54 'T'
  {   710,   9,  15,  11,    1,  -14 },   // 0x55 'U'
  {   727,   9,  15,  11,    1,  -14 },   // 0x56 'V'
  {   744,  10,  15,  11,    1,  -14 },   // 0x57 'W'
  {   763,   9,  15,  11,    1,  -14 },   // 0x58 'X'
  {   780,   9,  15,  11,    1,  -14 },   // 0x59 'Y'
  {   797,   9,  16,  11,    1,  -15 },   // 0x5A 'Z'
  {   815,   5,  16,   7,    1,  -15 },   // 0x5B '['
  {   825,   9,  15,  11,    1,  -14 },   // 0x5C '\'
  {   842,   5,  15,   7,    1,  -14 },   // 0x5D ']'
  {   852,   9,   5,  11,    1,  -14 },   // 0x5E '^'
  {   858,   9,   2,  11,    1,   -1 },   // 0x5F '_'
  {   861,   4,   4,   6,    1,  -15 },   // 0x60 '`'
  {   863,   9,  16,  11,    1,  -15 },   // 0x61 'a'
  {   881,   9,  16,  11,    1,  -15 },   // 0x62 'b'
  {   899,   8,  16,  10,    1,  -15 },   // 0x63 'c'
  {   915,   9,  16,  11,    1,  -15 },   // 0x64 'd'
  {   933,   8,  16,  10,    1,  -15 },   // 0x65 'e'
  {   949,   8,  16,  10,    1,  -15 },   // 0x66 'f'
  {   965,   9,  16,  11,    1,  -15 },   // 0x67 'g'
  {   983,   9,  15,  11,    1,  -14 },   // 0x68 'h'
  {  1000,   2,  15,   4,    1,  -14 },   // 0x69 'i'
  {  1004,   9,  15,  11,    1,  -14 },   // 0x6A 'j'
  {  1021,   9,  15,  11,    1,  -14 },   // 0x6B 'k'
  {  1038,   9,  15,  11,    1,  -14 },   // 0x6C 'l'
  {  1055,  10,  16,  11,    1,  -15 },   // 0x6D 'm'
  {  1075,   9,  15,  11,    1,  -14 },   // 0x6E 'n'
  {  1092,   9,  16,  11,    1,  -15 },   // 0x6F 'o'
  {  1110,   9,  16,  11,    1,  -15 },   // 0x70 'p'
  {  1128,   9,  16,  12,    1,  -15 },   // 0x71 'q'
  {  1146,   9,  16,  11,    1,  -15 },   // 0x72 'r'
  {  1164,   9,  16,  11,    1,  -15 },   // 0x73 's'
  {  1182,   9,  16,  11,    1,  -15 },   // 0x74 't'
  {  1200,   9,  15,  11,    1,  -14 },   // 0x75 'u'
  {  1217,   9,  15,  11,    1,  -14 },   // 0x76 'v'
  {  1234,  10,  15,  11,    1,  -14 },   // 0x77 'w'
  {  1253,   9,  15,  11,    1,  -14 },   // 0x78 'x'
  {  1270,   9,  15,  11,    1,  -14 },   // 0x79 'y'
  {  1287,   9,  16,  11,    1,  -15 },   // 0x7A 'z'
  {  1305,   7,  16,   9,    1,  -15 },   // 0x7B '{'
  {  1319,   2,  15,   4,    1,  -14 },   // 0x7C '|'
  {  1323,   7,  16,   9,    1,  -15 },   // 0x7D '}'
  {  1337,   9,   5,  12,    1,  -11 } }; // 0x7E '~'

const GFXfont font12pt7b PROGMEM = {
  (uint8_t  *)font12pt7bBitmaps,
  (GFXglyph *)font12pt7bGlyphs,
  0x30, 0x39, 13 };

// Approx. 2015 bytes

 

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Slaxery пишет:
А как узнать это самое смещение? Оригинальный шрифт остался, могу тоже сбросить
Не понял вопроса.
Как это "как узнать смещение"?! Вы же сами в первом посте указали в глифе для символа '0' значение смещения в битмапах 146, значит со 146-го байта в битмапах начинаются биты для '0', но почему то отрезаете вначале не до 146-го а значительно больше.
Для следующего за '9' символа ':' смещение 311, значит на все битмапы для символов '0'..'9' начинаются от 146-го байта и заканчиваются на 310-м байте, всего 165, у вас почему то 108 байт осталось в битмапах.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Slaxery, Вам нужно учесть два момента:

1. В первой колонке второго массива - смещения начала букв в первом массиве.

2. В последней структуре (строки 212-215) указывается код первого из используемых символов.

Рекомегндую решать задачу в два этапа:

1. Тупо выкинуть строки со 116 по 131 и одновременно в строке 215 заменить 0x20 на 0x30. Проверить, что все работает, как должно.

2. В строке 132 видим, что неиспользуемые нами символы в начале занимают 146 байт. Выкидываем из из первого массива (12 строк и два байта) и вычитаем это число (146) из первой колонки всех строк второго массива (достаточно 132-141). Проверяем, что все работает.

3. Заключительный: удаляем неиспользуемые "хвосты" первого и второго массивов.

Примечание: если нам кроме цифр нужна десятичная точка, то количество выкидываемых строк в началах первого и второго массивов немного уменьшается, соответственно, уменьшается и смещение, которое нужно вычитать.

Slaxery
Offline
Зарегистрирован: 04.05.2019

Всем спасибо за помощь. Эта хрень заработала!)))

Теперь другой вопрос созрел. Если я захочу в шрифт что-то добавить, то как это сделать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В обратном порядке ))).

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

Slaxery пишет:

Теперь другой вопрос созрел. Если я захочу в шрифт что-то добавить, то как это сделать?

Я с вас угораю. Вы все это проделали и в голове вообще ничего не осталось?

Может уже сами изучите. как устроен шрифт - это ведь несложно:

https://glenviewsoftware.com/projects/products/adafonteditor/adafruit-gfx-font-format/