framebuffer的理解
来源:互联网 发布:宝安西乡网络推广公司 编辑:程序博客网 时间:2024/06/10 08:30
1. 查看相应驱动
ls -l /dev/fb0
crw-rw---- 1 root video 29, 0 jan 27 15:32 /dev/fb0
这是framebuffer的设备文件,有了这个文件就可以使用framebuffer了
cat /dev/fb0 > sreensnap
ls -l sreensnap
-rw-r--r-- 1 wsw wsw 6291456 jan 27 21:30 sreensnap
clear /*清除屏幕的输出 */
cat sreensnap > /dev/fb0
clear
文件/dev/fb0就是控制屏幕上的每一点的颜色的文件。改变这个文件的内容就相当于在屏幕上画图了。
2. 怎么改这个文件,用ioctl方法来读取framebuffer的信息。先了解两个数据结构fb_var_screeninfo(vinfo)和fb_fix_screeninfo(finfo)
finfo.smem_len:内存长度
finfo.line_length:每行长度
vinfo.xres:分辨率x轴
vinfo.yres:分辨率y轴
vinfo.bits_per_pixel:色彩深度
屏幕有1024*768个点,色彩深度32位,所以屏幕占用内存数为1024*768*32个byte,也就是3M字节保存一个屏幕的数据。
3. 对屏幕读写的流程:
A open打开---->lseek定位要读写的位置------>read/write作读写
B 把/dev/fb0映射到程序进程的内存空间中,得到一个指向这段存储空间的指针,方便读写。(需要知道能映射多少和该映射多少)
内存映射的大小:vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8字节
映射方法:fbp =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fp,0);
如果要修改的点坐标是(x,y),方法如下:
找到点对应的偏移值:location = x * (vinfo.bits_per_pixel / 8) + y * finfo.line_length(行数y乘以每行的字节数+列数乘以颜色深度换成字节数得到了偏移的字节数)
每个location都对应4个字节的颜色深度分别为fbp+location(蓝色),fbp+location+1(绿色),fbp+location+2(红色),fbp+location+3(是否透明)
最后解除映射:munmap(fbp, screensize)
- framebuffer的理解
- FrameBuffer的理解(转)
- 理解framebuffer
- 学习linux framebuffer遇到的一些词汇的理解
- FrameBuffer的原理 linux开启FrameBuffer
- framebuffer设备的参数 和framebuffer编程
- Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解
- Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解
- 简单的Framebuffer驱动
- 全面的framebuffer详解
- 全面的framebuffer详解
- framebuffer的配置方法
- framebuffer的编程资料
- 全面的framebuffer详解
- 全面的framebuffer详解
- FrameBuffer的原理
- framebuffer设备的参数
- 全面的framebuffer详解
- 对话框换肤
- 牵引之手
- MTK HISTROY 小结 3
- Android环境搭建常见问题
- 我的学习目标
- framebuffer的理解
- 打鱼还是晒网
- 获取大于等于0的随机数
- android里在程序中修改listView里的内容
- 一组关于Python的讲座课件
- Windows下通过cygwin架设sshd服务
- Android 中的ListView内容刷新问题
- c语言版仿c++封闭动态数组
- JavaScript Event