我的 E680i 已经买了三年了,一直想要研究它,却苦于技术不足。网上的手机程序,大多是二进制包,想要学习也没有办法。

以前在 Windows 下,甚至可以通过一个叫做 MotoVision 的程序,把手机当摄像头用,可惜根本找不到源代码……

昨天查了查资料,发现小 i 的屏幕色深是 16 位的,也就是每个像素点的颜色值存储为两个字节,那么整个屏幕的数据就是 320*240*2/1024=150 KB,每个像素点分为 RGB 三色,存储方法为 RRRRRGGG GGGBBBBB (16 位 565 方式),那么根据最近学的一点数字图象处理的知识,很容易就可以把它转换成 BMP 格式。

小 i 的操作系统是 Linux,屏幕设备文件是 /dev/fb0,也就是 framebuffer,这也是我把程序叫做 fb2bmp 的原因。只要通过 telnet 把 /dev/fb0 拷贝到电脑上,得到的就是拷贝瞬间的屏幕数据。

fb2bmp,可以将 fb0 的数据转换成 16bit 和 24bit 的 BMP 文件,16bit 比较好办,加上个文件头即可,需要注意的是要加上 3 个 DWORD 类型的掩码,表示 RGB 三种颜色分别占哪几位。24bit 则需要对数据进行移位,然后再加上文件头。

项目已经放在 http://github.com/iven/e680_fb2bmp/ ,有兴趣可以去看看。

补上图:

评论