Чем конвертировать изображение под ssd1306

Тема в разделе "Arduino & Shields", создана пользователем kvv213, 9 ноя 2016.

  1. kvv213

    kvv213 Гик

    Уважаемые друзья,

    Мучаюсь и никак не могу понять, почему моя картинка криво выводится на монохромном дисплее. Нутром чую, что проблема в описании массива самой картинки.

    Использую:
    Adafruit_GFX.h
    Adafruit_SSD1306.h

    Вывожу картинку через display.drawBitmap

    На выходе получаю мешанину пикселей :(

    В родной библиотека картинка определяется как:
    static const unsigned char PROGMEM logo16_glcd_bmp[] =
    { B00000000, B11000000,
    B00000001, B11000000,
    B00000001, B11000000,
    B00000011, B11100000,

    И она выводится нормально, у меня же картинка определяется как:
    static const unsigned char Poo6448[] PROGMEM={
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0010 (16) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0020 (32) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0030 (48) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0040 (64) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0050 (80) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x00, 0x00, 0x00, 0x01, // 0x0060 (96) pixels

    И не выходит ничего путного. Каким образом конвертировать мое шестнадцатеричное представление в двоичное? Никто не знает?
     
  2. Unixon

    Unixon Оракул Модератор

    Это у вас в исходном коде существует двоичное и шестнадцатеричное представление, а в скомпилированной программе ничего такого нет, там просто байты.
    Дело не в представлении, а в том, что содержимое массива негодно.
    Какой функции вы пытаетесь скормить этот массив? Покажите весь код, относящийся к выводу графики. Нужно понимать, что библиотек от вас ожидает, в каком формате она хочет картинку.
     
  3. Unixon

    Unixon Оракул Модератор

    На монохром скорее всего выводится битовая карта. В вашем массиве 768бит, по одному на пиксел. Какого размера матрица?
     
  4. kvv213

    kvv213 Гик

    Вывожу через такой вызов:
    display.drawBitmap(0, 0, Poo4848, 48, 48 , 1);

    Родная картинка выводится через:
    display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
    И выводится нормально.

    Экран 64х48 пикселей, ОЛЕД.

    Картинку подготавливал в фотошопе, затем конвертил через вот этот конвертировщик: https://www.online-utility.org/image/convert/to/XBM

    Полный массив:
    static const unsigned char PROGMEM Poo4848[] ={
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0010 (16) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0020 (32) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0030 (48) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0040 (64) pixels
    0xFF, 0xFF, 0x1F, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, // 0x0050 (80) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0060 (96) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x03, // 0x0070 (112) pixels
    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, // 0x0080 (128) pixels
    0x07, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0090 (144) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, // 0x00A0 (160) pixels
    0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x07, 0x00, // 0x00B0 (176) pixels
    0x00, 0x00, 0x00, 0x00, 0x03, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00C0 (192) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xC1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00D0 (208) pixels
    0x80, 0x87, 0x8F, 0x8F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x00, 0x00, // 0x00E0 (224) pixels
    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC1, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00F0 (240) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0100 (256) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0110 (272) pixels
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0120 (288) pixels
    };
     
  5. Unixon

    Unixon Оракул Модератор

    А в каком формате вы картинку в конвертер передаете? Глубину цвета не забыли в 1бит выставить? У вас слишком много данных получается на выходе.
     
  6. kvv213

    kvv213 Гик

    Конечно забыл. Так, в фотошопе сконвертил в 1 бит (сначала в грейскейл, затем в битмап). Сохранил, потом при помощи этой утилиты сконвертил в циферки:
    tatic const unsigned char PROGMEM Poo4848[] ={
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF,
    0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF,
    0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF,
    0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0xFF,
    0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x80, 0xFF, 0xFF,
    0xFF, 0x3F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF,
    0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF,
    0xFF, 0x3F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF,
    0xFF, 0x07, 0x06, 0x70, 0xE0, 0xFF, 0xFF, 0x03, 0x06, 0x70, 0xE0, 0xFF,
    0xFF, 0x07, 0x06, 0x70, 0xC0, 0xFF, 0xFF, 0x03, 0x06, 0x20, 0xE0, 0xFF,
    0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF,
    0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF,
    0x7F, 0x00, 0xFE, 0x37, 0x00, 0xFF, 0x3F, 0x00, 0xFC, 0x3F, 0x00, 0xFE,
    0x3F, 0x00, 0xFC, 0x1F, 0x00, 0xFE, 0x3F, 0x00, 0xF0, 0x0F, 0x00, 0xFE,
    0x3F, 0x00, 0x00, 0x01, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE,
    0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF,
    0xFF, 0xA5, 0x7F, 0x89, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    };

    Картинка стала выводиться совсем по другому, что-то более осмысленное, но все равно не та, что была в оригинале. Разве она не должна быть в виде нулей и единиц?
     
  7. Unixon

    Unixon Оракул Модератор

    kvv213 нравится это.
  8. kvv213

    kvv213 Гик

    Да, действительно этот конвертер сделал нормальную картинку (правда инвертированную) :) Все отобразилось!