小结 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;
}
作者: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;
}
相关文章推荐
- javascript:void(0)点击登录没反应怎么解决
- 关于Referenced file contains errors 解决方法
- bootstrap气泡组件popover的使用
- jquery 动态添加和删除 ul li列表
- StringBuffer&&StringBuilder
- css实现浏览器导航功能
- Javascript获取页面元素的位置
- 项目中是否 使用Automatic Reference Counting
- jQuery EasyUI使用教程之创建可折叠面板
- 常见CSS注意问题
- JavaScript中的setInterval用法
- 前端系统学习快速进阶教程全攻略
- javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
- JSP引用JS文件中文乱码问题
- flex前端传送ws服务报文开发步骤
- js判断输入的数值大于另一个数值
- Liferay Portal学习笔记:portlet执行的两个阶段
- jQuery.lazyload详解
- 每天一篇javascript学习小结(Date对象)
- Javascript总结