Добрый день. Имеется Adafruit 32х32 RGB матрица. Все примеры из библиотек RGB Matrix Panel и Adafruit GFX Library прекрасно работают. Необходимо вывести bmp картинку. Есть пример colorwheel_progmem_32x32 в котором изображение храниться в PROGMEM. Начинаю разбираться. Количество светодиодов в матрице 1024, а в image.h хранится 1528 значений. Каждый цвет может быть представлен 3мя или 4мя битами. В данном примере изображение выводится из буфера, я так понимаю, с помощью функции Код (Text): void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) { int16_t i, j, byteWidth = (w + 7) / 8; for(j=0; j<h; j++) { for(i=0; i<w; i++ ) { if(pgm_read_byte(bitmap + j * byteWidth + i / 8) & (128 >> (i & 7))) { drawPixel(x+i, y+j, color); } } } } но количество значений не совпадает. Начал уже разбираться с форматом bmp файла. Помогите разобраться с выводом графики на матрицу, с преобразованием bmp изображения в PROGMEM или может стоит попробовать размещать изображение на sd карте а потом вытаскивать значения цвета из определённой области файла и с помощью matrix.drawPixel (matrix.Color333 или matrix.Color444) в цикле выводить это на матрицу? Заранее спасибо за ответы!
Файл на карте всяко универсальней будет. Да и редактировать проще графический файл в графическом редакторе, нежели хидер в текстовом.
Прежде всего нужно научиться управлять отдельным светодиодом. Посмотрите, как работает функция drawPixel(x+i, y+j, color); С этим разобрались?
Можно завести картинку прямо в исходнике в виде двумерного массива (матрицы) - тогда рисовать можно, просто пробегая матрицу двойным циклом. В случае с файлом придется изучить его формат и преобразовать линейную последовательность в ту же матрицу. Причем не нужно формировать матрицу, нужно просто составить несложную формулу, по которой на основе x и y будет вычисляться порядковый номер пикселя в файле.
Вопрос как раз в том и есть, что необходимо преобразовать картинку в массив значений цвета, а потом в цикле выводить это на матрицу. Есть конвертер для LCD дисплеев http://www.henningkarlsen.com/electronics/t_imageconverter565.php но он преобразовывает в формат RGB565 а для матрицы небходимо RGB333 или RGB444.
Формат файла: http://ru.wikipedia.org/wiki/BMP Наверное, имеет смысл сохранять картинку в таком формате, который проще будет читать и обрабатывать. Например, картинка должна быть без сжатия - тогда пиксели будут лежать в виде простого двумерного массива. Если лень разбирать структуру формата, можете поступить следующим образом: создать некий эталоный файл с простым изображением (например, черный прямоугольник на белом фоне), затем открыть файл в HEX-редакторе и анализировать его. Несколько файлов с разными изображениями помогут понять структуру данных. Не факт, что этот метод проще, но я иногда использовал подобный подход для вскрывания форматов и он вполне работоспособен, хоть и не во всех случаях. Файл со сжатием так расковырять не получится.
Вот почему и был взят за основу BMP файл. Вопрос только в цветовой перекодировке, понятной для матрицы
Вот еще о структуре файла: http://c-site.h1.ru/infa/bmp_struct.htm http://jenyay.net/Programming/Bmp Проясняется?