您的位置:首页 > 移动开发 > Android开发

(转)Android屏幕Framebuffer绘图机制

2013-11-25 17:22 671 查看
Android屏幕绘制基本与linux相同,都是使用Framebuffer来绘制屏幕,设备为/dev/graphic/fb0

Framebuffer存储在内存或者显存中,比如一个800 × 600的屏幕,每个像素点为16位色,那么Framebuffer的大小就为(800 × 600 × 16/8) byte

手机的LCD屏幕通过显存中当前的Framebffer和缓存的framebuffer来绘制屏幕上的每一个像素点

具体顺序为:

1 打开framebuffer设备;

2 通过ioctl取得fixed screen information;(ioctl(fd, FBIOGET_FSCREENINFO, &finfo))

3 通过ioctl取得variable screen information;(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo))

4 通过mmap映射设备内存到进程空间;(记得区分内核空间和用户空间,用户空间是无法对物理内存直接读写的)

5 写framebuffer;

6 终止。(记得终止时一定要取消映射,并close掉句柄)

ioctl中request参数:

    FBIOGET_VSCREENINFO表示用户获取屏幕的可变参数;

    FBIOPUT_VSCREENINFO表示用户设置可变的屏幕参数;

    FBIOGET_FSCREENINFO表示用户获得屏幕的固定参数;

    FBIOBLANK表示调用sep4020fb_blank函数清空液晶屏;

    FBIOPUTCMAP表示设置屏幕的颜色表;

    FBIOGETCMAP表示获得颜色表。

其实也可以发现,android中的很多机制都是通过ioctl来实现的,比如binder等等:)

转自:http://blog.sina.com.cn/s/blog_64b54bce0100lmxz.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: