dev fb0的入門練習

2021-05-25 01:33:13 字數 2091 閱讀 8787

/dev/fb0

是linux系統下幀緩衝裝置的裝置檔案。

檔案/dev/fb0就是控制螢幕上的每一點的顏色的檔案。我們可以寫程式來改變這個檔案的內容,就可以方便的在螢幕上畫圖了:-)

這個是linux上不帶硬體加速的一些圖形庫的底層基礎。

當我們可以在螢幕上畫乙個點的時候,畫線,畫面就是理所當然的了,不過怎麼去畫那些圖形就屬於圖形演算法了,這是一門比較博大精深的技術分支,我在其他文章裡再討論。

我們可以用常規的posix檔案函式開啟它,

struct fb_var_screeninfo 和 struct fb_fix_screeninfo 兩個資料結構是在/usr/include/linux/fb.h中定義的,裡面有些有趣的值:(都是無符號32位的整數)

在fb_fix_screeninfo中有

__u32 smem_len 是這個/dev/fb0的大小,也就是記憶體大小。

__u32 line_length 是螢幕上一行的點在記憶體中占有的空間,不是一行上的點數。

在fb_var_screeninfo 中有

__u32 xres ,__u32 yres 是x和y方向的解析度,就是兩個方向上的點數。

__u32 bits_per_pixel 是每一點占有的記憶體空間。

1)練習一

#include

#include

#include

#include

#include

int main () 

if (ioctl(fp,fbioget_fscreeninfo,&finfo))

if (ioctl(fp,fbioget_vscreeninfo,&vinfo))

printf("the mem is :%d/n",finfo.smem_len);

printf("the line_length is :%d/n",finfo.line_length);

printf("the xres is :%d/n",vinfo.xres);

printf("the yres is :%d/n",vinfo.yres);

printf("bits_per_pixel is :%d/n",vinfo.bits_per_pixel);

close (fp); }

2)練習2

#include

#include

#include

#include

#include

int main ()

if (ioctl(fp,fbioget_fscreeninfo,&finfo))

if (ioctl(fp,fbioget_vscreeninfo,&vinfo))

screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

/*這就是把fp所指的檔案中從開始到screensize大小的內容給對映出來,得到乙個指向這塊空間的指標*/

fbp =(char *) mmap (0, screensize, prot_read | prot_write, map_shared, fp,0);

if ((int) fbp == -1)

/*這是你想畫的點的位置座標,(0,0)點在螢幕左上角*/

x = 100;

y = 100;

location = x * (vinfo.bits_per_pixel / 8) + y * finfo.line_length;

*(fbp + location) = 100;

/* 蘭色的色深 */

/*直接賦值來改變螢幕上某點的顏色*/

*(fbp + location + 1) = 15;

/* 綠色的色深*/

*(fbp + location + 2) = 200;

/* 紅色的色深*/

*(fbp + location + 3) = 0;

/* 是否透明*/

munmap (fbp, screensize);

/*解除對映*/

close (fp);

/*關閉檔案*/

return 0;

}

jQuery的簡單入門練習

1 2899093 94這是段落中的粗體文字 95顯示文字 96顯示html 9798 99100 101 名稱 102 顯示值103 104105 106檸檬學院 107顯示href屬性的值 108109 110115 116這是乙個段落 117這是另乙個段落 118 輸入框 119設定文字 12...

python入門的基礎練習(三)

break是結束迴圈,break之後 迴圈體內 不再執行。while true yn input continue y n if yn in n n break print running.計算100以內偶數之和。continue是跳過本次迴圈剩餘部分,回到迴圈條件處。sum100 0 counte...

基於Opencv2017的C 入門 0

一 首先 安裝完成opencv2017鏈結為 選擇版本3.4.11的windows。在安裝opencv2017之前,需要安裝visual studio 2017,軟體及安裝步驟鏈結為 二 其次 掌握c 語言,從網上可以系統的學習。c 是在c基礎上發展過來的,基本的語句跟c的差別不大,比如說if語句 ...