用“字形阵列”,阵列fu,指针fu,但没有乳房,爆炸或汽车追逐这个项目的快速而肮脏的角色 - c -c c c c c c c -the the艰难的方式 - 当希望将字符放在Linux缓冲区屏幕上时,我想为数据创建一个显示显示屏,但是在Barbones的非GUI Raspberry Pi上,控制台的实际文本太小,该项目对此项目进行了损坏。该项目基于其他工作,这是Linux中FrameBuffer处理的一个很好的例子。 See http://raspberrycompote.blogspot.com/2015/01/low-level-graphics-on-raspberry-pi-part.html So what was done in for this project was a bunch of arrays of 1s and 0s representing characters and numbers were created and these arrays are looped through with a "set pixel" routine to determine when and where an actual pixel is written to with a color value.字体是基于外星人哨兵的。 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,只要您正确获得 /dev /fbn,n是n是n是n是显示的n次数,这与Linux Framebuffer例程无关紧要。因此,屏幕和“深度”的尺寸可能会有所不同。我有一个TFT LCD屏幕,可以很好地处理旧的黑色红外覆盆子摄像头的输出,但是请尝试任何X32位图,而不会进行任何转换,并且事情变得有趣。总体而言,我的目标是“将一些文字送到屏幕上”。数组是使用接近“ Aliens Auto-Gun字体”的东西创建的,并根据我们想要的位置,X和Y以及所有这些以及Glyph数组中的1或0进行了编写的例程将像素设置为给定的颜色值。
从那里产生了其他一些例程:打印一个字符串。打印数字显示。和矩形,充满边框和线条。
该演示显示了一些动画,但这不是目标。使用一种“缓冲额翻转”方法,这是大多数图形的工作方式 - 将记忆空间(例如阵列)写入大小和颜色深度的显示器,具有颜色值,然后“闪烁”(可能是1990年代的旧单词)(可能是1990年代的一个旧单词),该内存将记忆到映射到屏幕上的同一内存。这使得从一个屏幕到另一个屏幕非常平稳。
因此,动画是可能的,但不是目标。只需将所有内容都写入“后退缓冲区”,然后将其写入屏幕缓冲区就足够简单。一旦将这种代码放下(例如Raspberry Coptote的代码),您对该后缓冲区的作用就是您的业务:从我们谦虚的文字到3D渲染。
该演示假定可能正在使用较旧或能力的系统。因此,所有字符都在一个块中。实际的字形 - 由数组表示的“持有”通过“指向数组”数组的“持有”。在块中,将此数组分配给数组数据,因此一旦块传递,这些对象就消失了。这使您可以选择使用哪些字符,然后丢弃其余的字符。还要注意,有两个阵列代表两个字体尺寸。每个都是128个元素,第n个元素与字符的无符号int值相对应。因此,出于这个原因,一个空间在元素32中。“ S”的ASCII值是83,因此数组的第83个元素是指向S数组的指针。
较小的数字数组也被用作指向代表数字的数组,第n个元素与数字相对应的元素,范围为0-9。这使我们避免了将用于字母的ATOI呼叫。
总体而言,在第一代单核覆盆子上进行了测试,它相当快。结果可能会有所不同。这也是基本的C代码。
还有其他方法可以将字符登上屏幕。但是我选择了这种快速而肮脏的措施,以确保灵活性和简单性。此代码的“数组fu”也可能对其他事物有用。数组不必是任何形式的字母,数字或字形 - 例如,它可以是精灵,也可以是任何您想要的。您受所使用的屏幕和处理器的限制。
如果您想要更多的精美字体,则互联网上有“真实”字体并将其转换为像素的演示。如果您可以将它们变成数组,例如程序读取位图并将其变成一系列颜色值,则可以将它们用作该程序中的字体。请记住,所有这些虽然以2D数组的形式显示为1D数组。因此,您必须提前知道阵列的尺寸应该是什么。该演示中的阵列是手动创建的。整个ASCII范围 - 128个字符未完成。因此,如果您想要不存在的东西,例如较低的案例字符和标点符号,则必须自己创建它。进一步注意:我注意到以800x600分辨率的Beaglebone上的Debian安装上的分段故障 - 但我使用的是同一HDMI屏幕。好奇的。结果将随系统和操作系统而变化。我什至在Beaglebone上获得较低的默认像素深度。这两个系统都是非GUI系统(GUIS是为家庭主妇)。我发现摆脱YRES * 2 Trick上的“扩展”缓冲区,它在Rasperry上效果很好,消除了初始化错误,并允许使用我长大的Atari 2600闪烁的同样温和的动画。我想象一个单独的阵列写作,然后以旧学校方式筛选“闪电”可能会起作用,我将对此进行实验。图形上的较低分辨率只有Debian Beaglebone给我怀旧的感觉。我还注意到,与我在Raspberry Pi上使用的“像素深度”相同的“像素深度”,当将像素放在缓冲区中时,我的值仍然可以超过15个颜色。覆盆子会窒息,但不会cha。这允许更多颜色选项。每个系统都是不同的,因此您始终需要进行实验。玩这个代码。