Какие форматы изображений принимаются для дисплеев?

Извините, если информации не хватает, я новичок в этой теме.

У меня есть ESP32, подключенный к 7,5-дюймовому дисплею Waveshare RWB, и я могу отображать изображения, конвертируя их в .xbm и включая шестнадцатеричный код в скетч. Пока все хорошо.

Но вот мой вопрос: каковы именно требования? Потому что, глядя на код изображения .xbm, я вижу, что это такой шаблон:

0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00

Но когда я использовал скрипт Python

import binascii
filename = 'test.png'
with open(filename, 'rb') as f:
    content = f.read()
print(binascii.hexlify(content))

чтобы преобразовать изображение в шестнадцатеричный код, я получил это: b'89504e470d0a1a0a0000000d4948445200000280000001800802000000b2...'(продолжение для тысяч символов, не хотел вставлять все это сюда

Однако при попытке запустить скетч, который успешно отображал первый шестнадцатеричный код со вторым кодом изображения, я получил эту ошибку (снова вырезал большой беспорядок строки):

...0000000049454e44ae426082};

^

C:\Users\Administrator\Desktop\SPI_test_example\SPI_test_example.ino: In function 'void loop()':

SPI_test_example:167:21: error: 'showBitmapExample' was not declared in this scope

   showBitmapExample();

                     ^

SPI_test_example:171:51: error: 'showFont' was not declared in this scope

   showFont("FreeMonoBold9pt7b", &FreeMonoBold9pt7b);

                                                   ^

exit status 1
'showBitmapExample' was not declared in this scope

Итак, я хотел бы знать, должен ли код изображения иметь именно тот формат, который я упомянул первым? Это очень важно для меня, потому что я хочу автоматизировать процесс от ввода любого изображения до использования полученного кода для подачи на дисплей.

Заранее спасибо!

EDIT: Насколько я понимаю, оба формата представляют собой одни и те же данные, только первый отображает белый пиксель как 0xFF,0xFF,0xFF, а второй как FFFFFF.

, 👍0


1 ответ


Лучший ответ:

2

Это вопрос не формата изображения, а того, в каком формате c принимает данные.

У вас есть представление Python для двоичных данных в шестнадцатеричном кодировании. Это можно использовать только с Python.

C представляет шестнадцатеричные значения, добавляя к ним префикс 0x.

Вам придется изменить свой код Python, чтобы выводить каждый байт отдельно, добавить к нему префикс 0x и отделить каждый запятой. Затем это можно обернуть в структуру массива.

,

Это имеет такой большой смысл, я не ожидал, что это будет связано с языком программирования! Преобразование должно быть легко выполнимым, поэтому у меня остается несколько вопросов: Во-первых, почему gimp, а точнее файл .xbm, использует синтаксис C++ (0x00)? Во-вторых, разве один цветной пиксель не отображается с 6 цифрами (000000 черный, FFFFFF белый и т. д.) - как я могу отобразить тот же диапазон цветов, используя всего 0x00?, @Flying Thunder

Это все просто цифры. 0xFFFFFF — это то же самое, что 0xFF, 0xFF, 0xFF. Три байта — это все 0xFFFFFF. То есть 0xFF красный, 0xFF зеленый и 0xFF синий. Файл XBM — это часть исходного кода C. Другие форматы - нет. Если вы сохраните файл как XBM, вы получите исходный код C., @Majenko