Работа с выходными данными LCD, TFT, e-Ink или USB-C HDMI на Arduino перенесет вас в мир создания C-массивов для правильной подготовки кода изображения. Онлайн-инструменты конвертации станут отличным подспорьем для изображений и шрифтов.

Одними из лучших онлайн-инструментов конвертации можно назвать File to CArray и Lvgl Font converter. Таким образом, для стандартных непрозрачных изображений это работает нормально, но как только вы переходите к прозрачным изображениям, используя такие функции, как STM32 ChromArt и функции DMA2D, вы предпочитаете вместо этого перейти к меньшему коду с поддержкой Alpha, например 16-битному ARGB1555, ARGB444, делая "перемещение спрайтов" возможным.
Другой вариант шрифтов уменьшенного размера – использовать шрифты A4 (4-битный альфа), где цвет заполняется функциями DMA2D. Это экономит много места для кода и сохраняет шрифты с функциями сглаживания.
Копаясь в мире цветовых форматов, вам нужно немного больше преобразований изображений, чем вы можете найти в Интернете, поэтому был написан этот инструмент для платы Arduino с поддержкой USB-накопителя: перетащите изображения на USB-накопитель, запустите код и получите преобразованный код C-массива. Вы можете создать свои собственные функции loop() для ваших личных требований. Код поддерживает изображения BMP и PNG (Alpha), а также поддерживает следующие типы цветов в качестве входных данных:
#define COLORMODE_ARGB8888 0x00000000U /*!< цветовой режим ARGB8888 */
#define COLORMODE_RGB888 0x00000001U /*!< цветовой режим RGB888 */
#define COLORMODE_RGB565 0x00000002U /*!< цветовой режим RGB565 */
#define COLORMODE_ARGB1555 0x00000003U /*!< цветовой режим ARGB1555 */
#define COLORMODE_ARGB4444 0x00000004U /*!< цветовой режим ARGB4444 */
#define COLORMODE_ABGR8888 0x00000010U /*!< цветовой режим ARGB8888 RB изменен */
#define COLORMODE_BGR888 0x00000011U /*!< цветовой режим RGB888 RB изменен */
#define COLORMODE_BGR565 0x00000012U /*!< цветовой режим RGB565 RB изменен */
#define COLORMODE_ABGR1555 0x00000013U /*!< цветовой режим ARGB1555 RB изменен*/
#define COLORMODE_ABGR4444 0x00000014U /*!< цветовой режим ARGB4444 RB изменен */
#define COLORMODE_XRGB8888 0x00000020U /*!< цветовой режим ARGB8888 альфа игнорируется*/
#define COLORMODE_XRGB1555 0x00000023U /*!< цветовой режим ARGB1555 альфа игнорируется*/
#define COLORMODE_XRGB4444 0x00000024U /*!< цветовой режим ARGB4444 альфа игнорируется*/
#define COLORMODE_XBGR8888 0x00000030U /*!< ARGB8888 альфа игнорируется RB изменен*/
#define COLORMODE_XBGR1555 0x00000033U /*!< ABGR1555 альфа игнорируется RB изменен*/
#define COLORMODE_XBGR4444 0x00000034U /*!< ABGR4444 альфа игнорируется RB изменен*/
Файлы преобразуются в следующие выходные данные:
#define COLORMODE_ARGB8888 0x00000000U /*!< цветовой режим ARGB8888 */
#define COLORMODE_ARGB8888 0x00000000U /*!< цветовой режим ARGB8888 */
#define COLORMODE_ARGB1555 0x00000003U /*!< цветовой режим ARGB1555 */
#define COLORMODE_ARGB4444 0x00000004U /*!< цветовой режим ARGB4444 */
#define COLORMODE_RGB565 0x00000002U /*!< цветовой режим RGB565 */
Как правило, для непрозрачных изображений (без альфа-канала) вы используете BMP (32 или 16 бит) в качестве входных данных, для изображений на основе альфа-канала вы используете PNG (32-битный истинный цвет) в качестве входных данных.
Файлы PNG и BMP декодируются в один большой массив изображений в 32-битном формате. (uint32_t *IMAGERAW). Для этого требуется либо много оперативной памяти, либо SDRAM. В примере кода используется SDRAM платы PortentaH7, а максимальные размеры установлены на 480x320. Адаптируйте для правильного использования. После считывания в буфер изображения структура изображения h7image подготавливается со всеми необходимыми свойствами. эта структура используется для вызова функций преобразования.
Запись на USB-накопитель происходит медленно, небольшие файлы менее 64x64 занимают меньше секунды, а запись полных образов может занять до 10-20 сек.
Кроме того, инструмент поддерживает преобразование C-массива в C-массив, поэтому вы можете добавить свой c-массив в один из включаемых файлов (screen.h / screen.cpp) и вызвать функции для преобразования. Изображения настроены структурой h7image, которая объединяет все функции изображения для конвертации:
typedef struct {
void *imagearray; /// указатель на массив
uint16_t width; /// ширина
uint16_t height; /// высота
uint32_t colormode; /// Альфа-режимы : COLORMODE_ARGB1555 , COLORMODE_ARGB4444 ,COLORMODE_ARGB8888 // Фиксированные цветовые режимы : COLORMODE_RGB565
uint8_t bpp; /// бит на пиксель => /8 байт на пиксель
uint16_t xpos;
uint16_t ypos;
char name[24];
char namea[24]; // имя массива в тексте -
char namesx[16];
char namesy[16];
} h7image;
Используя функцию DMS2D для STM32, можно понять, что цветовой режим A4 меняет местами верхний и нижний полубайты кода, сгенерированного LVGL. Функция преобразования FontA4 работает в том же типе преобразования массив-массив, и вы можете преобразовать A4 основанные шрифты до пригодной для использования версии. В результате преобразование осуществляется весьма просто.
© digitrode.ru