Какие форматы изображений принимаются для дисплеев?
Извините, если информации не хватает, я новичок в этой теме.
У меня есть 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.
@Flying Thunder, 👍0
1 ответ
Лучший ответ:
Это вопрос не формата изображения, а того, в каком формате c принимает данные.
У вас есть представление Python для двоичных данных в шестнадцатеричном кодировании. Это можно использовать только с Python.
C представляет шестнадцатеричные значения, добавляя к ним префикс 0x
.
Вам придется изменить свой код Python, чтобы выводить каждый байт отдельно, добавить к нему префикс 0x
и отделить каждый запятой. Затем это можно обернуть в структуру массива.
- Преобразование строки в const unsigned char
- Какие микроконтроллеры Arduino могут управлять параллельным 8-битным дисплеем ILI9341 с разрешением 320x240@60fps с прямым доступом к памяти, дополнительным ядром ЦП или и тем, и другим, и как?
- ESP32 FREERTOS сбой при использовании Adafruit ST7789 в задачах с включенным Wi-Fi
- LILYGO TTGO T-Display не может обнаружить акселерометр, гироскоп и датчик температуры MPU 6050
- Как отображать текст на OLED?
- ESP32 WROOM 32 Проблемы с SPI EMF
- WS2812b - Интерполировать пиксели на неопиксельной матрице с маской
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
Это имеет такой большой смысл, я не ожидал, что это будет связано с языком программирования! Преобразование должно быть легко выполнимым, поэтому у меня остается несколько вопросов: Во-первых, почему gimp, а точнее файл .xbm, использует синтаксис C++ (0x00)? Во-вторых, разве один цветной пиксель не отображается с 6 цифрами (000000 черный, FFFFFF белый и т. д.) - как я могу отобразить тот же диапазон цветов, используя всего 0x00?, @Flying Thunder
Это все просто цифры. 0xFFFFFF — это то же самое, что 0xFF, 0xFF, 0xFF. Три байта — это все 0xFFFFFF. То есть 0xFF красный, 0xFF зеленый и 0xFF синий. Файл XBM — это часть исходного кода C. Другие форматы - нет. Если вы сохраните файл как XBM, вы получите исходный код C., @Majenko