我是靠谱客的博主 优秀自行车,最近开发中收集的这篇文章主要介绍小结 frambuffer 原理及流程 (五),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文的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 直接读/写 屏幕缓冲区,进行绘图和图片显示了

  1.   
  2.     struct fb_var_screeninfo vinfo;
  3.     struct fb_fix_screeninfo finfo;
  4.     
  5. 2.1打开 设备

  6.     fdfd=open("/dev/fb0",O_RDWR);
  7.     
  8. 2.2 获取LCD参数

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

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

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

 2.3 映射 

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

  2.    
  3. 2.4 绘制图片
  4.         
  5.     for(y=100;y<200;y++)
  6.         for(x=100;x<300;x++)
  7.         {
  8.             location=(x+vinfo.xoffset)*(vinfo.bits_per_pixel/8)+
  9.                  (y+vinfo.yoffset)*finfo.line_length;
  10.             /*
  11.             location=x*2+y*vinfo.xres*2;;
  12.             */

  13.             int b=(x-100)/6;
  14.             int g=31-(y-100)/16;
  15.             int r=10;
  16.             unsigned short int t=r<<11|g<<5|b;
  17.             *((unsigned short int *)(fbp+location))=t;
  18.         }
  19.         

最后

以上就是优秀自行车为你收集整理的小结 frambuffer 原理及流程 (五)的全部内容,希望文章能够帮你解决小结 frambuffer 原理及流程 (五)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部