基於fb的bmp顯示
#include #include #include #include #include #include #include #include #include char *fbp = 0;
int xres = 0;
int yres = 0;
int bits_per_pixel = 0;
//14byte
typedef struct
__attribute__((packed)) bitmapfileheader; /* 檔案頭結構 */
//40byte
typedef struct
__attribute__((packed)) bitmapinfoheader; /* 位圖資訊頭結構 */
#if 0
typedef struct
__attribute__((packed)) pixel;
#else
typedef struct
__attribute__((packed)) pixel;
#endif
bitmapfileheader filehead;
bitmapinfoheader infohead;
int show_bmp(char *bmpfile);
long chartolong ( char * string, int length );
int main(int argc,char *argv)
//獲取固定引數
if(ioctl(fbfd,fbioget_fscreeninfo,&finfo))
//獲取可變引數
if(ioctl(fbfd,fbioget_vscreeninfo,&vinfo)) /*
printf("semem_start:%x,smem_len:%d,mmio_start:%d,mmio_len:%d,type:%d,xpan:%d,y_pan:%d,y_wrap:%d,accel:%d,id:%d,llen:%d,visual:%d\n", \
finfo.smem_start,finfo.smem_len,finfo.mmio_start,finfo.mmio_len,finfo.type,\
finfo.xpanstep,finfo.ypanstep,finfo.ywrapstep,finfo.accel,finfo.id, \
finfo.line_length,finfo.visual);
*/ xres = vinfo.xres;
yres = vinfo.yres;
bits_per_pixel = vinfo.bits_per_pixel;
//計算整個螢幕的大小
screensize = vinfo.xres * vinfo.yres *vinfo.bits_per_pixel / 8;
//對映裝置到記憶體中
fbp = (char *)mmap(0,screensize,prot_read | prot_write,map_shared,fbfd,0);
if((int)fbp == -1)
//顯示一張bmp
show_bmp(argv[1]);
munmap(fbp,screensize);
close(fbfd);
return 0; }
int show_bmp(char *bmpfile)
/* 讀取位**件頭 */
rc = fread(&filehead,sizeof(bitmapfileheader),1,fp);
if(rc != 1)
if(memcmp(filehead.cftype,"bm",2) != 0)
/* 讀取位圖資訊頭 */
rc = fread((char *)&infohead,sizeof(bitmapinfoheader),1,fp);
if(rc != 1)
ciwidth = (int)chartolong(infohead.ciwidth,4);
ciheight = (int)chartolong(infohead.ciheight,4);
cibitcount = (int)chartolong(infohead.cibitcount,4);
fseek(fp,(int)chartolong(filehead.cfoffbits,4),seek_set);
bytesperline = (ciwidth * cibitcount +31) /32 *4;
printf("width=%d,height=%d,bitcount=%d,offset=%d\n",ciwidth,ciheight, \
(int)chartolong(filehead.cfoffbits, 4));
line_x = line_y = 0;
while(!feof(fp)) }
fclose(fp);
return 0;
}long chartolong( char * string, int length )
return( number );
}
FB顯示驅動框架
fb顯示驅動框架從上到下分為 5層,如圖 1所示。fb裝置驅動是乙個抽象的顯示驅動模型,抽象出了顯示驅動公有的操作,為上層提供系統呼叫,為底層驅動提供介面。原始碼主要在 fb.h kernel include linux 和fbmem.c kernel drivers video 兩個檔案中。fb驅...
framebuffer顯示bmp檔案,考慮填補問題
因為bmp檔案的寬度如果不是4的倍數,就會自動填充。因為這個問題掉到坑里了,導致是黑白的,下面這個 考慮填充的問題,關鍵在下面的skip 我的機器顯示屏是24位的,bmp檔案也是24位的,測試 如下 bmp.c檔案 include bmp.h fbp,對映記憶體起始位址 scrinfo,螢幕資訊結構...
VC 建立BMP檔案並顯示
建立mfc cstatic的pciture外掛程式 設定為frame 1 在標頭檔案中初始化bmp檔案頭資訊變數 bitmapfileheaderm bmfheader bitmapinfoheaderm bmiheader lpbyte lpbbmdata bitmapinfo bminfo ui...