您的位置:首页 > Web前端

小结 frambuffer 原理及流程 (五)

2015-11-13 10:28 267 查看
本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。

作者:yuweixian4230@163.com

博客:yuweixian4230.blog.chinaunix.net  

  通过学习,加深对framebuffer的了解,现在记录下 对 framebuff 的了解 认识

framebuffer:

    1. framebuffer驱动程序的功能是什么??

         1.1 在内存中分配一段内存,当做显存使用

         1.2 对LCD 进行配置,  这样应用程序中,就可以得到 lcd 信息了

         

   2.流程:

     2.1 打开 /dev/fb0

     2.2 ioctl操作获取当前显示屏幕的参数,如屏幕分辨率、每个像素点的比特数和偏移。根据屏幕      参数可计算屏幕缓冲区的大小

     2.3 将屏幕缓冲区 映射到 用户空间

     2.4 直接读/写 屏幕缓冲区,进行绘图和图片显示了

  

    struct fb_var_screeninfo vinfo;

    struct fb_fix_screeninfo finfo;

    

2.1打开 设备

    fdfd=open("/dev/fb0",O_RDWR);

    

2.2 获取LCD参数

    ioctl(fdfd,FBIOGET_FSCREENINFO,&finfo); //获取
固定参数

    ioctl(fdfd,FBIOGET_VSCREENINFO,&vinfo); //获取可变参数

    screensize=vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8; //计算一帧图片占了
多少字节

 2.3 映射 

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

   

2.4 绘制图片

        

    for(y=100;y<200;y++)

        for(x=100;x<300;x++)

        {

            location=(x+vinfo.xoffset)*(vinfo.bits_per_pixel/8)+

                 (y+vinfo.yoffset)*finfo.line_length;

            /*

            location=x*2+y*vinfo.xres*2;;

            */

            int b=(x-100)/6;

            int g=31-(y-100)/16;

            int r=10;

            unsigned short int t=r<<11|g<<5|b;

            *((unsigned short int *)(fbp+location))=t;

        }

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: