用“字形陣列”,陣列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。這允許更多顏色選項。每個系統都是不同的,因此您始終需要進行實驗。玩這個代碼。