• 正文
    • 打開bmp文件
    • 獲取lcd參數(shù)
    • 獲取結構體fb_var_screeninfo
    • 映射framebuffer
  • 相關推薦
申請入駐 產業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之編程步驟

2024/11/22
1456
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

打開bmp文件

//打開.bmp文件

    FILE *fb = fopen(bmpname, "rb");

    if (fb == NULL)

    {

        printf("fopen bmp errorrn");

        return -1;

    }

獲取lcd參數(shù)

查看<linux/fb.h>

struct fb_var_screeninfo {

        __u32 xres;                     /* visible resolution           */

        __u32 yres;

        __u32 xres_virtual;             /* virtual resolution           */

        __u32 yres_virtual;

        __u32 xoffset;                  /* offset from virtual to visible */

        __u32 yoffset;                  /* resolution                   */




        __u32 bits_per_pixel;           /* guess what                   */

        __u32 grayscale;                /* 0 = color, 1 = grayscale,    */

                                        /* >1 = FOURCC                  */

        struct fb_bitfield red;         /* bitfield in fb mem if true color, */

        struct fb_bitfield green;       /* else only length is significant */

        struct fb_bitfield blue;

        struct fb_bitfield transp;      /* transparency                 */




        __u32 nonstd;                   /* != 0 Non standard pixel format */




        __u32 activate;                 /* see FB_ACTIVATE_*            */




        __u32 height;                   /* height of picture in mm    */

        __u32 width;                    /* width of picture in mm     */




        __u32 accel_flags;              /* (OBSOLETE) see fb_info.flags */




        /* Timing: All values in pixclocks, except pixclock (of course) */

        __u32 pixclock;                 /* pixel clock in ps (pico seconds) */

        __u32 left_margin;              /* time from sync to picture    */

        __u32 right_margin;             /* time from picture to sync    */

        __u32 upper_margin;             /* time from sync to picture    */

        __u32 lower_margin;

        __u32 hsync_len;                /* length of horizontal sync    */

        __u32 vsync_len;                /* length of vertical sync      */

        __u32 sync;                     /* see FB_SYNC_*                */

        __u32 vmode;                    /* see FB_VMODE_*               */

        __u32 rotate;                   /* angle we rotate counter clockwise */

        __u32 colorspace;               /* colorspace for FOURCC-based modes */

        __u32 reserved[4];              /* Reserved for future compatibility */

};

頭文件中,用fb_var_screeninfo結構體定義屏幕參數(shù)基本信息,如分辨率,像素點位數(shù)及RGB分別用多少位表示。

獲取結構體fb_var_screeninfo

//獲取屏幕信息

    //若屏幕顯示區(qū)域大小不合適,可用ioctl(dev_fd, FBIOPUT_VSCREENINFO, &scrinfo)設置

    if (ioctl(dev_fd, FBIOGET_VSCREENINFO, &scrinfo))

    {

        printf("get screen infomation error!rn");

        return -1;

    }

使用ioctl的參數(shù),F(xiàn)BIOGET_VSCREENINFO來表示獲得屏幕的可變信息。

映射framebuffer

//計算需要的映射內存大小

    screensize = scrinfo.xres_virtual * scrinfo.yres_virtual * scrinfo.bits_per_pixel / 8;

    // printf("screensize=%lu!rn", screensize);




    //內存映射

    fbp = (char *)mmap(NULL, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, 0);

    if (-1 == (int)fbp)

    {

        printf("mmap error!rn");

        return -1;

    }

首先計算需要的映射內存大小,計算公式為:映射內存大小 = 屏幕大小 = xres * yres * 每個像素位數(shù) / 8。然后使用mmap映射內存,PROT_READ | PROT_WRITE表示該區(qū)域可讀、可寫;MAP_SHARED表示該區(qū)域是共享的,APP寫入數(shù)據時,會直達驅動程序。到這一步之后就做好顯示圖片的準備了。

飛凌嵌入式

飛凌嵌入式

保定飛凌嵌入式技術有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設計和生產的高新技術企業(yè),是國內較早專業(yè)從事嵌入式技術的企業(yè)之一。 經過十幾年的發(fā)展與積累,公司擁有業(yè)內優(yōu)秀的軟硬件研發(fā)團隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設有華東、華南技術服務中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務網絡。公司研發(fā)的智能設備核心平臺廣泛應用于物聯(lián)網、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機器人、環(huán)境監(jiān)測等諸多領域。

保定飛凌嵌入式技術有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設計和生產的高新技術企業(yè),是國內較早專業(yè)從事嵌入式技術的企業(yè)之一。 經過十幾年的發(fā)展與積累,公司擁有業(yè)內優(yōu)秀的軟硬件研發(fā)團隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設有華東、華南技術服務中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務網絡。公司研發(fā)的智能設備核心平臺廣泛應用于物聯(lián)網、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機器人、環(huán)境監(jiān)測等諸多領域。收起

查看更多

相關推薦