Как вывести изображение JPEG на ЖК-дисплей микроконтроллера? - PullRequest
0 голосов
/ 26 февраля 2012

Я недавно разрабатываю некоторые прошивки для платы разработки STM3210E, в которой установлен процессор ARM cortex M3.Он был подключен к ЖК-дисплею 240x320.Пройдя демонстрационную прошивку, я понял, что изображения кодируются в 32-битных переменных (поправьте меня, если я ошибаюсь), хранящихся в массиве, как показано ниже.

uint32_t STM32Banner [50] = {0x6461EB7A, 0x646443BC, 0x64669BFE, 0x6468F440, 0x646B4C82, 0x646DA4C4, 0x646FFD06, 0x64725548, 0x6474AD8A, 0x647705CC, 0x64795E0E, 0x647BB650, 0x647E0E92, 0x648066D4, 0x6482BF16, 0x64851758, 0x64876F9A, 0x6489C7DC, 0x648C201E, 0x648E7860, 0x6490D0A2, 0x649328E4, 0x64958126, 0x6497D968, 0x649A31AA, 0x649C89EC, 0x649EE22E, 0x64A13A70, 0x64A392B2, 0x64A5EAF4, 0x64A84336, 0x64AA9B78, 0x64ACF3BA, 0x64AF4BFC, 0x64B1A43E, 0x64B3FC80, 0x64B654C2, 0x64B8AD04, 0x64BB0546, 0x64BD5D88, 0x64BFB5CA, 0x64C20E0C, 0x64C4664E, 0x64C6BE90, 0x64C916D2, 0x64CB6F14, 0x64CDC756, 0x64D01F98, 0x64D277DA, 0x64D4D01C}

* +1004* Не могли бы вы объяснить, как преобразовать изображение JPEG / PNG / BMP в этот формат (RGB565)?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

У вас есть два варианта:

  1. Напишите свой собственный набор декодеров.
  2. Используйте доступные бесплатные декодеры

Первое решение действительно реально только для BMP (и, возможно, GIF), который является довольно простым форматом по сравнению с PNG и JPEG. Тем не менее, написание BMP-декодера, который обрабатывает все различные версии и особенности BMP, изящно требует довольно много работы (я пробовал). Взломать что-то, что может извлечь данные изображения из наиболее распространенных форматов BMP, довольно легко.

Второе решение - это, вероятно, путь для других форматов. Большинство декодеров с открытым исходным кодом доступны под LGPL или аналогичными, поэтому лицензирование не должно быть проблемой. Для изображений JPEG используйте libJPEG , для PNG - libPNG и для GIF - giflib .

Большинство декодеров не поддерживают декодирование в RGB565, поэтому вам придется написать конвертер для преобразования из RGB888 в RGB565.

0 голосов
/ 26 февраля 2012

используйте программу типа GIMP для преобразования в несжатый bmp (что вы обычно получаете, когда сохраняете как bmp).

У bmp есть что-то вроде 54-байтового заголовка, затем он входит в данные.Каждая строка представляет собой пиксели либо 3 байта (RGB), либо четыре байта (RGBX) на пиксель.Ширина выравнивается по 4-байтовой границе, так что если у вас есть три байта на каждый и умножьте это на ширину в пикселях, если это не кратно четырем (скажем, 3-битная ширина * 3 = 9 в качестве простого примера), то будетнемного набивки.Когда вы открываете файл в gimp, вы знаете, насколько он широк, и, возможно, вы захотите использовать gimp для настройки изображения в соответствии с вашим ЖК-экраном.Первые байты данных после заголовка - это пиксель в левом нижнем углу изображения, вам может потребоваться перевернуть изображение по оси y или просто начать таким образом и посмотреть, что произойдет.

Знаниеразмер вашего изображения (от открытия его с помощью gimp), вы можете сделать небольшую математическую проверку, чтобы увидеть, совпадает ли размер файла с тем, что я говорю, если он значительно меньше, тогда происходит некоторое сжатие, и вам нужносохранить снова и изменить настройки для BMP.

Как только вы это выясните, напишите простую программу, чтобы извлечь пиксели из BMP и сохранить их в желаемом формате.Еще лучше прочитать код и документы и понять, как программировать ЖК-дисплей, и вы можете переходить от необработанных пикселей к ЖК-дисплею без необходимости проходить через их определенный формат / код.

...