基於FB的bmp顯示

2021-06-10 07:29:12 字數 2637 閱讀 9533

基於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...