Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4470966
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-05-03 13:04:30

 本文的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.         
  20.  


阅读(1588) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~