/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語句 ...