Перевод графики в массив

Тема в разделе "Arduino & Shields", создана пользователем r0c, 22 фев 2022.

  1. r0c

    r0c Гик

    Библиотека U8g2 https://github.com/olikraus/u8g2 в своих примерах предлагает вывод изображений с помощью такого массива:
    Код (C++):
    static const unsigned char u8g2_logo_97x51_bits[] U8X8_PROGMEM = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
    };
     
    Все найденные программы-конвертеры ( в том числе онлайн-переводчики) переводят картинки в массив такого размера:
    Код (C++):
    static const unsigned char u8g2_logo_97x51_bits[] U8X8_PROGMEM = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
    };
     
    Соответственно, вывод графики не работает.
    Подскажите пожалуйста, спомощью чего сформировать массив для этой библиотеки?
     
    Последнее редактирование модератором: 22 фев 2022
  2. akl

    akl Гуру

    а в чем разница между этими массивами кроме длины?
     
  3. parovoZZ

    parovoZZ Гуру

    LCD Image Converter. Маст хэв под любой экран с любой развёрткой.
     
  4. b707

    b707 Гуру

    r0c - ваш вопрос абсолютно не конкретный.
    Вам надо разобраться, чем отличаются эти массивы. Точнее, очевидно, что надо разбираться не с массивами, а понять, чем отличается формат разметки файла под разные дисплеи. В разных дисплееях порядок обхода пикселей разный, например в дисплеях ОЛЕД пиксели кодируются вертикальными полосками по 8 штук. А в TFT дисплеях пиксели обычно идут горизонтально. Соответветсвенно, массив байтов для одного дисплея не подойдет для другого.
     
  5. parovoZZ

    parovoZZ Гуру

    Причём только в одном из них. И не дисплее, а в контроллере дисплея.
     
  6. r0c

    r0c Гик

    согласен, немного неккоректно спросил.
    дело в том, что уже готовые готовые массивы из различных прмеров и уроков для oled дисплея 1306 с библиотекой U8g2 не работают, но корректно отображаются c другими библиотеками.
     
  7. b707

    b707 Гуру

    дисплей в обоих случаях один и тот же?
    Если да, значит библиотека U8g2 использует другой формат экранного буфера, надо смотреть исходники библиотеки
     
  8. r0c

    r0c Гик

    Да , один и тот же.
     
  9. User248

    User248 Гик

    r0c, а вы учли, что кроме массива нужно указать дополнительные данные?
    Код (C++):

    void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)
     
     
    Последнее редактирование: 27 фев 2022
  10. User248

    User248 Гик

    Сделал в графическом редакторе монохромную картинку BMP 128х64 и сконвертировал в XBM онлайн здесь: https://convertio.co/ru/bmp-xbm/
    Для вывода на экран использовал функцию:
    Код (C++):

    u8g2.drawXBMP( 0, 0, L_width, L_height, L_bits);
     
    Всё работает. Пример в архиве.

    XBM_test.jpg
     

    Вложения:

    • XBM_test.zip
      Размер файла:
      7,1 КБ
      Просмотров:
      37
    Последнее редактирование: 27 фев 2022
    r0c нравится это.
  11. r0c

    r0c Гик

    Спасибо, что не прошли мимо. Вопрос в другом- чем сконвертировать изображение в массив?
     
  12. b707

    b707 Гуру

    совсем слепой, да? :) ссылка в том же сообщении:
     
  13. r0c

    r0c Гик

    это конвертер из одного в другой графический формат. Разве нет?
     
  14. b707

    b707 Гуру

    нет, xbm - это код на языке С. который можно вставить в скетч
     
    arkadyf и r0c нравится это.
  15. r0c

    r0c Гик

    Действительно можно. Картинка вполне себе открылась в текстовом редакторе. Спасибо!