2012-02-26 4 views
-2

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

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}

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

+0

Это 32-разрядные номера. –

+0

мой плохой. Это действительно 32-разрядные номера. Это была скорее человеческая ошибка. Итак, как мне преобразовать Jpeg-файл в этот формат? – Vish

+2

Мы не знаем, что это за формат, поэтому ваш вопрос невозможно ответить как поставленный. Но это, по крайней мере, связано с [libjpeg] (http://libjpeg.sourceforge.net/). –

ответ

0

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

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

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

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

1

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

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

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

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

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

Смежные вопросы