三、關於libfbx
http://yfy001.myetang.com libfbx是linux framebuffer 的一個擴充庫,使用它,你可以很方便的開發framebuffer的應用程序。 下面這個簡單的程序就可以產生一個有邊框的窗口。 代碼: /* gui.c -a simple box * * By cloudfly<[email protected]> * */ #include <libfbx/libfbx.h> #include <libfbx/libfbx-gui.h> #include <stdlib.h> #include <unistd.h> #include <config.h> int main() { int x, y; int dx, dy; int frame = 0; fb_init();//初始化 fb_handle_signals(); x = fb_screen->width;//寬度 y = fb_screen->height;//高度 fb_draw_textbox(0,0,x,y,0,255,0,255,0,0,fb_screen);//畫方框 return 0; } gcc -o gui gui.c -lfbx -lfbx-gui -ldl 完成編譯。 同時,libfbx還支持圖像,目前支持的圖像有png和ppm. 下面這個簡單的程序是畫一個移動的圖像 代碼: /* fbxmove.c - Tests the fb_move_object and fb_draw_image functions. * * By Michael Bourgeous * * $Id: fbxmove.c,v 1.10 2001/02/25 20:40:07 lethal Exp $ */ #include <libfbx/libfbx.h> #include <math.h> #include <config.h> int main() { float speed = 0.125; float radians = 0.0; float x = 160.0; float y = 120.0; fb_surface *object; fb_init(); fb_handle_signals(); object = fb_load_ppm("smiley.ppm"); fb_cls(); for(radians = 0.0; radians < (PI * 64.0); radians += (PI / 512.0)) { fb_move_object(speed, radians, &x, &y); fb_draw_image(object, fb_screen, (int)x, (int)y); speed = 0.1 * (sin(0.125 * radians) + 1.25); } fb_cleanup(); return 0; } gcc -o fbxmove fbxmove.c -lfbx -ldl 完成編譯。 你可以發現,使用libfbx,你可以非常簡單快捷的開發framebuffer應用程序。 FrameBuffer 就像一張畫布,使用什麼樣子的畫筆,如何畫畫,還需要你自己動手完成。 許多控制檯C程序設計中,要用到漢字進行提示或人機交互,而在控制檯下顯示漢子, 曾經是某些中文linux廠商的祕密哦。如何編制不使用外掛中文平臺就能顯示漢字的C程序呢? 主要的原理就是將漢字畫到屏幕上,現在控制檯下的中文環境zhcon也是使用了這個原理。 下面的方法可以幫你在西文環境下顯示漢字。這種方法是調用中文漢字庫進行漢字顯示。 國家標準規定:漢字庫分94個區,每個區有94個漢字(以位作區別),每個漢字在漢字庫中有確定的區和位編號,這就是漢字的區位碼。 每個漢字在庫中是以點陣字模形式存儲的,一般採用16×16點陣(32字節)、24×24點陣(72字節),每個點用一個二進制位(0或1)表示, 對應在屏幕上顯示出來,就是相應的漢字。 由於在中文環境下,輸入的是漢字的內碼,我們必須將之轉換成區位碼,算出偏移量,從字庫中找到對應的漢字,將其字模顯示即可。 內碼轉換成區位碼方法如下: qh=c1-0xa0 wh=c2-0xa0 其區位碼就是: qw=qh*0xff+wh 該漢字在字庫中離起點的位置是: offset=(94*(qh-1)+(wh-1))*32L 程序例: 代碼: /* gbfbx.c -a simple chinese show * * By cloudfly<[email protected]> * */ #include <libfbx/libfbx.h> #include <libfbx/libfbx-gui.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #define row 2 //縱座標放大倍數 #define col 3 //橫座標放大倍數 int main() { int x,y,i; char *s="中文漢子顯示"; FILE *fp; char buffer[32]; unsigned char qh,wh; unsigned long offset; fb_init(); //圖形屏幕初始化 fb_handle_signals(); x=fb_screen->width-300; //設定 x座標 y=fb_screen->height-300; //y座標 int n,j,k,m; if((fp=fopen("St.cfg","rb"))==NULL)//中文字庫St.cfg可以從我的主頁下載。ucdos也有 { fb_cleanup(); return 0; } while(*s) { qh=*(s)-0xa0; wh=*(s+1)-0xa0; offset=(94*(qh-1)+(wh-1))*32L;//計算該漢字在字庫中偏移量 fseek(fp,offset,SEEK_SET); fread(buffer,32,1,fp); //取出漢字32字節的點陣字模存入buffer中(一個漢字) for(i=0;i<16;i++) for(n=0;n<row;n++) for( j=0;j<2;j++) for( k=0;k<8;k++) for(m=0;m<row;m++) if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL) fb_putpixel(x+8*j*col+k*col+m,y+i*row+n,0,255,0,fb_screen); //將32位字節的點陣按位在屏幕上畫出來 s+=2; //因爲一個漢字內碼佔用兩個字節,所以s必須加2 x+=40; } return 1; } gcc -o gbfbx gbfbx.c -lfbx -ldl 完成編譯 |
libfbx顯示漢字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.