Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

Картинка-лого в консоли Linux

Никак не могу нагуглить. Каким образом мне реализовать вывод картинки в консоль (fb)? В поиске обсуждают в основном просмотр картинок через fbi, а мне нужно именно вывести картинку в консоль так, чтобы она была там наравне с остальным выводом. Вот как этот пингвин. Попробовал что-то типа
cat image.bmp > /dev/fb0,
но получил артефакты вместо картинки -- формат, видно, не тот (картинка 16-битная). Или опять скажут, что вопрос не вопрос?


Ответ

Нашёл следующее решение.
Сначала надо узнать формат буфера. У многих, в том числе и у меня, это BGRA, т.е. 4 байта на пиксел и в порядке: синий, зелёный, красный, пустой.
fbset -i выдаёт размеры экрана и ширину скан-строки в видеопамяти в байтах в строке "LineLength", может отличаться от ширины экрана * 4 в большую сторону. Делим это число на 4 -- получаем ширину картинки, которую надо подготовить.
Рисуем картинку в GIMPе -- ширина как посчитали, высота может быть любая, включаем альфа-канал. С помощью инструмента Цвет-Компоненты-Микшер каналов меняем местами красный и синий цвета. Сохраняем в "стандартном" формате "RAW".
Теперь её можно записывать во фреймбуфер с помощью cat
Недостаток который я не знаю как устранить: Драйвер текстовой консоли ничего знать не хочет о том, что вы там делаете с видеопамятью напрямую и считает, что там остались те буквы, что он там нарисовал последний раз, поэтому, при скроллировании, он не будет перерисовывать те места, где буквы по его мнению не должны измениться. Картинка не скроллируется и при переключении виртуальных консолей стирается.

Комментариев нет:

Отправить комментарий