Быстрые и грязные символы для буфера Linux в C - жесткий путь - с «глифными массивами», массивом FU, Pointer FU, но без груди, взрывов или автомобильных погон. Этот проект - это характер. Когда я хочу поставить символы на экран для буфера Linux, я хотел создать дисплей для данных, но фактический текст консоли был слишком маленьким на Barbones, не работающих на малиновой PI, который был задержан для этого проекта. Этот проект основан на других работах, хорошем примере обработки кадров в Linux. См. Http://raspberrycompote.blogspot.com/2015/01/low-graphics-on-raspberry-pi-part.html, так что то, что было сделано для этого проекта, было группой массивов 1s и 0s, представляющих символы, и числа были созданы, и эти массивы заправлены с помощью «установленного пикселя». Шрифты основаны на пистолетах с часовыми пришельцами. https://www.youtube.com/watch?v=hqdy-5iqvuu. Эта демонстрация предполагает, что не каждая система будет быстрой и будет иметь экран HDMI (что перегревается в моем случае - не будьте мне), так что обратите внимание на эту строку:
vinfo.bits_per_pixel = 8;
Значения цвета диапазон от 0 до 15. Конечно, это не самый глубокий цвет. Если вы поднимете эту «глубину», вы можете замедлить ситуацию, но вы получите более широкий спектр цветов. И это:
vinfo.xres = 1184;
vinfo.yres = 624;
Ваш экран, будь то HDMI, или, возможно, какой -то TFT LCD - это не имеет значения для подпрограммы Framebuffer Linux, если вы получите право /dev /fbn, где n - NTH -количество дисплеев - подходит для различия. Таким образом, размеры экрана и «глубины» могут отличаться. У меня есть экран TFT LCD, который хорошо обрабатывает вывод старой инфракрасной малиновой камеры Noir, но попробуйте любой растровый карту X32 без какого -либо преобразования, и все становится интересным. В целом моей целью было «просто получите немного текста на экране». Массивы были созданы с использованием чего-то близкого к «Aliens Auto-Gun Font», и процедуры, записанные для установки пикселей на заданное значение цвета, в зависимости от того, где мы хотим, x и y и все это, и что 1 или 0 в глиф-массиве.
Оттуда были обнародованы некоторые другие процедуры: печать строки. Печать номерного дисплея. И прямоугольники, заполненные или пустыми с границей и линиями.
Эта демонстрация показывает немного анимации, но это не цель. Используя своего рода подход «переворачивания буферов», и именно так работает большинство графики - написание в пространство памяти, например, сначала массив, это равняется дисплею по размеру и глубине цвета, со значениями цвета, а затем «блаженным» (вероятно, старое слово из 1990 -х годов) эта память с той же памятью, которая отображается на экране. Это делает очень плавный переход от одного экрана к другому.
Таким образом, анимация возможна, но не цель. Это достаточно просто, чтобы просто все для этого «заднего буфера», а затем написать его в буфер экрана. После того, как у вас есть такой код, такой как код от Raspberry Compote, то, что вы делаете с этим Back Buffer, является вашим бизнесом: от нашего скромного текста до 3D -рендеринга.
Эта демонстрация предполагает, что более старые или менее способные системы могут использоваться. Так что все персонажи в блоке. Фактические глифы - представленные массивами, «удерживаются» с помощью массива «указателя на массив». В блоке этому массиву присваивается указатели на данные массива, поэтому после того, как блок проходит мимо, эти объекты исчезли. Это позволяет вам выбирать, какие персонажи вы используете, и отбросить остальные. Также следует отметить, что есть два массива, представляющие два размера шрифтов. Каждый из них - 128 элементов, а N -й элемент соответствует незнанному значению INT символа. Таким образом, по этой причине пространство находится в элементе 32. Значение ASCII «S» составляет 83, поэтому 83 -й элементы массивов являются указателем на массив S.
Массивы меньшего числа также используются для элементов, которые указывают на массивы, представляющие числа, NTH-элемент, соответствующий числу, в диапазоне от 0-9. Это отдает нас, призыв Atoi, который будет использоваться для букв.
В целом, протестировано на одноядерной малине 1 -го поколения, это было довольно быстро. Результаты могут варьироваться. Это также базовый C -код тоже.
Есть и другие способы к персонажам на экране. Но я выбрал эту быструю и грязную меру, чтобы обеспечить гибкость и простоту. «Массив Фу» этого кода также может оказаться полезным для других вещей. Массив не должен быть буквой, номером или глифом любого рода - это может быть спрайт, например, или все, что вы хотите. Вы ограничены экраном, который вы используете, и процессором.
Если вы хотите больше причудливых шрифтов, в Интернете есть демонстрации, которые принимают «настоящие» шрифты и конвертируют их в пиксели. Если вы можете довести их в массивы, например, программа, которая читает растровое изображение, и превращает ее в массив значений цвета, вы можете использовать их в качестве шрифтов в этой программе. Имейте в виду, что все это, находясь в коде в виде двухмерных массивов, действительно являются 1D массивами. Таким образом, вы должны знать заранее, какими должны быть размеры ваших массивов. Массивы в этой демонстрации были созданы вручную. Все диапазоны ASCII - 128 символов не завершены. Поэтому, если вы хотите чего -то, чего нет, таких как персонажи из низкого регистра и пунктуация, вам придется создать его самостоятельно. Дальнейшие примечания: я отмечаю ошибку сегментации при установке Debian на Beaglebone с разрешением 800x600 - но я использую тот же экран HDMI. Любопытный. Результаты будут варьироваться в зависимости от системы и ОС. Я даже получаю более низкую глубину пикселя по умолчанию на Beaglebone. Обе системы являются не GUI Systems (GUI для домохозяек). Я обнаружил, что избавление от «расширенного» буфера на трюке Yres * 2, который хорошо работал над Rasperry, исключил ошибку инициализации и допускает ту же легкую анимацию с Atari 2600 Flicker, на котором я вырос. Я полагаю, что отдельный массив для написания, чтобы затем «Ближе», чтобы экранировать в старом школьном пути, вместо этого я буду экспериментировать с этим. Более низкое разрешение на графику, только Debian Beaglebone дает мне ностальгические чувства. Я также замечаю, что с той же «глубиной пикселя», как я использовал на Raspberry Pi, я все еще могу преодолеть 15 в своих значениях до цвета при помещении пикселя в буфере. Малину задушится на это, но не на бигль. Это позволяет больше цветовых вариантов. Каждая система отличается, поэтому вам всегда нужно экспериментировать. Получайте удовольствие от этого кода.