Здравствуйте, уважаемые читатели! В данной статье хочу рассказать, как можно преобразовать изображения из стандартного 24-битного представления каждого цвета в формате RGB в 16-битное и 8-битное. Это может быть полезно для снижения размера картинок, анимации перед выводом на дисплей. Особенно это будет полезно при подготовке картинок для вывода на светодиодную матрицу, т.к. переход от 24-битной глубине цвета к 8-битной практически не будет заметен, но позволить существенно снизить объем занимаемой изображениями памяти.
Для преобразования картинок в массив, каждый элемент которого будет содержать шестнадцатиричное представление цвета каждого пикселя, я буду использовать программу LCD Image Converter. Я уже рассказывал об основах работы с данной программой в статье "Создание анимации для LED матрицы 16x16 адресных светодиодов".
Откроем (Файл - Открыть) изображение размером 16x16 пикселей в котором представлена большая часть возможных цветов видимого спектра (все файлы и ссылки в конце статьи).
Переходим в меню Настройки – Преобразования. Вместо Монохромного выбираем Цветное. Переходим во вкладку Изображение. И далее, если мы выберем Блок данных 24 бита и откроем Предпросмотр, то увидим привычное представление цвета каждого пикселя в виде 3х байт.
Теперь перейдем к оптимизации изображения и запишем каждый цвет картинки с помощью 2 байт. Здесь же во вкладке Настройка – Предустановка выбираем Цветное R5G6B5. И Блок данных выбираем 16 бит. Открываем Предпросмотр и видим, что каждый цвет теперь у нас занимает 2 байта.
А вот стандартной предустановки для записи каждого цвета одним байтом в программе нет. Но к счастью, есть возможность импортировать свои предустановки в формате XML. Т.е. можно самому создавать цветовые схемы и добавлять их в программу. Нажимаем кнопку Импорт, открываем файл Цветное R3G2B3 (ссылка на него в конце статью) и добавляем новую предустановку. Теперь выбираем её и выбираем Блок данных – 8 бит.
Открываем Предпросмотр, и видим, что массив заполнен 8-битным представлением каждого цвета.
А в коде скетча мы сравним все три варианта картинки и увидим, что в случае матрицы адресных светодиодов разница между тремя вариантами практически отсутствует. Т.к. в библиотеке FastLED цвет задается в 24 битном формате, то предварительно мы его будем преобразовывать в данный формат из 16 битного и 8-битного с помощью специальных функций.
Загрузив скетч в Ардуино и подключив светодиодную матрицу и кнопку, можно убедится, что визуально разница практически отсутствует (видео с демонстрацией работы скетча ниже). А значит, для светодиодных матриц можно использовать 8-битное представление цвета, без потери качества изображения. При этом каждое изображение будет занимать в 4 раза меньше памяти.
Скетч из статьи - https://disk.yandex.ru/d/ZIHc35B6Sp9COw
Файл XML предустановок цвета R3G2B3 для LCD Image Converter - https://disk.yandex.ru/d/wnVSyb3P4Ukrvg
Картинка 16x16 пикселей для теста - https://disk.yandex.ru/i/MxYIXPIfXcIWPQ
Ссылка на программу Lcd image converter - https://sourceforge.net/projects/lcd-image-converter/
Видео по материалам статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!