17

Я знаю, что могу захватить кадровый буфер в Linux, используя что-то вроде cp /dev/fb0 ~/myimage и повторно отобразить это, скопировав обратно на устройство, например, cp ~/myimage /dev/fb0 . В каком формате находятся данные изображения кадрового буфера? и как бы я хотел показать готовое изображение (JPG, PNG) в кадровый буфер? Могу ли я конвертировать в этот формат с помощью imagemagick?

п.с. Я использую Raspberry Pi Raspberry.



Обновление 11-12-2012

Я использовал Pygame для отображения изображений в моем приложении. Не уверен, что для отображения изображений используется буфер кадров. Но это вполне соответствует моим потребностям.

6 ответов6

7

Вы пробовали Fbida?

fbida содержит fbi для просмотра изображений для фреймбуфера.

Ссылка на страницу fbi - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

PS - я не уверен, будет ли это работать в Raspbian.

3

это может помочь вам, подробное руководство http://hacklab.cz/2012/04/22/usefulness-linux-framebuffer-virtual-console Я думаю, что все это в одном месте о Linux Framebuffer

2

В каком формате находятся данные изображения кадрового буфера?

В документации по ядру Linux 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 говорится:

Пиксели хранятся в памяти в аппаратно-зависимых форматах. Приложения должны знать формат хранения пикселей, чтобы записывать данные изображения в буфер кадровой памяти в формате, ожидаемом аппаратным обеспечением.

Форматы описываются типами кадрового буфера и визуальными элементами. Для некоторых визуальных изображений требуется дополнительная информация, которая хранится в полях информации переменного экрана bits_per_pixel, градациях серого, красном, зеленом, синем и трансп.

Наглядные материалы описывают, как информация о цвете кодируется и собирается для создания макропикселей. Типы описывают, как макропиксели хранятся в памяти. Поддерживаются следующие типы и визуальные эффекты.

Ниже приведен список визуальных элементов и типов, но описания недостаточно, чтобы я сразу понял точные форматы.

1

Если вы хотите использовать cp /dev/fb0 ~/myimage , изображение должно содержать только информацию о пикселях, и порядок должен быть правильным (RGB, BGR, RGBA, ARGB ...)

Я тоже хочу это сделать, но не нашел подходящего инструмента, поэтому я использую python, чтобы помочь мне предварительно сделать изображение. Вы можете попробовать это.

0

Посмотрите на /usr/include/linux/fb.h структуры вроде fb_var_screeninfo. Могут быть различные глубины цвета и форматы. Я слишком часто вижу 16 бит / пиксель, сейчас у меня 32. Введите fbset отдельно, и он покажет текущие настройки. Который почти наверняка будет одной из записей в /etc/fb.modes.

upstairs# fbset

mode "1920x1080"
    geometry 1920 1080 1920 1080 32
    timings 0 0 0 0 0 0 0
    rgba 8/16,8/8,8/0,8/24
endmode

Imagemagick может работать, если вы можете сделать так, чтобы он точно соответствовал нужному режиму. Я, вероятно, написал бы что-то на C, дюжина или около того строк, вызывающих libjpeg или libpng, могут распаковать изображение в массив памяти. Ваши биты / цвет и т.д. Должны совпадать, или вам нужно что-то написать для преобразования. Хороший опыт.

Кроме того, вместо чтения / записи / dev / fb0 в виде файла, откройте () его, чтобы получить дескриптор файла, затем mmap (), чтобы вы работали с указателем на память. Это намного быстрее при выполнении переводов, по крайней мере, в 10 раз.

Но для размещения изображений на экране я просто устанавливаю qiv. Затем нажмите F1 для получения справки, но при отображении изображения знак «х» наполовину будет записан в корневое окно, если вы этого хотите. Или просто установите его в качестве обоев в настройках рабочего стола, и он будет появляться при каждой загрузке.

0

Если вы можете установить их, fbcat создаст образ ppm, а fbgrab создаст образ png.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .