当前位置:首页>编程日记>正文

小结 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.         

http://www.coolblog.cn/news/095ae755598ec962.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • 2019-9
  • jquery 使用小技巧
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • linux批量创建用户和密码
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • js常用阻止冒泡事件
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • 【设计模式】 模式PK:策略模式VS状态模式
  • JS实现-页面数据无限加载
  • CSS小技巧——CSS滚动条美化
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里巴巴分布式服务框架 Dubbo
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 两张超级大表join优化
  • Arm芯片的新革命在缓缓上演
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 通过Spark进行ALS离线和Stream实时推荐
  • 行为模式之Template Method模式