引用:http://wiseideal.iteye.com/blog/1250175

(根据王研科先生的探索)
Android G1手机的色深是16bit, 即R/G/B=5/6/6. 故需要一些特殊处理才能获得其屏幕图像。
我们可以adb登录进入Android手机,先dump出/dev/fb0的内容,然后将dump出的文件拷贝到PC(ubuntu)上用convert命令进行处理。

1. 在Android手机上获取framebuffer内容:
# cat /dev/graphics/fb0 > /mnt/sdcard/fb0

2. 把文件拷贝到PC上的/tmp目录:
$ adb pull /mnt/sdcard/fb0 /tmp/fb0

3. 从/tmp/fb0文件中取出第一屏的内容(一般会有2到3屏的内容):
$ dd bs=307200 count=1 if=/tmp/fb0 of=/tmp/screenshot1.xmp
这里,手机屏幕分辨率是320*480; 颜色深度为16bit (R/G/B=5/6/5),即2字节; 故有
320*480*2=307200
或在shell下执行:
$ echo $((320*480*2))
这里得到的图像是pixmap格式的.

4. 这时取到的截屏数据要转成每个颜色值为8bit的raw图像数据:
原理如下:

intmain ( intargc, char*argv [ ] ) { unsigned shortin;// 16bit unsigned charout [ 3 ];// 8bit*3 while (read ( 0, &in, 2 )== 2 ) { out [ 2 ]= (in & 0x1f )<< 3; out [ 1 ]= ( (in >> 5 )& 0x3f )<< 2; out [ 0 ]= ( (in >> 11 )& 0x1f )<< 3; write ( 1, out, 3 ); } return 0; }

将以上代码编译成执行文件/tmp/565to88后,再执行:
$ /tmp/565to888 </tmp/screenshot1.xmp >/tmp/screenshot888.xmp
这将把颜色转化为24bit色深。

5.最后把24bit色深的图像转换成PNG格式:
$ /usr/bin/convert -depth 8 -size 320x480 rgb:screenshot888.xmpscreenshot.png

现在可以用以下命令查看截屏(screenshot.png文件)啦:
$ /usr/bin/displayscreenshot.png



附: HTC HD7上查看截屏:
手机侧:
# cat /dev/graphics/fb0 > /mnt/sdcard/fb0
PC侧:
$ dd bs=$((480*800*2)) count=2 if=/tmp/fb0 of=/tmp/screenshot1.xmp
$ /tmp/565to888 </tmp/screenshot1.xmp >/tmp/screenshot888.xmp
$ convert -depth 16 -size 480x800 /tmp/screenshot888.xmp /tmp/screenshot888.png
$ display /tmp/screenshot888.png

更多相关文章

  1. Android工程目录结构简介
  2. 从零学Android(十三)、Android中的数据存储方式简介
  3. [置顶] 【小超_Android】2014年框架类源码年度精品汇总
  4. 安卓文件读写操作方法汇总
  5. android monitor tool (7.0 监控文件系统 native层实现)
  6. Android中的各种Adapter
  7. android sdk manager upgrade
  8. Android四种保存数据的方法
  9. Android(安卓)创建XMl文件

随机推荐

  1. Android(安卓)Studio中NDK的配置
  2. 关于Android的线程问题
  3. Android(安卓)ORM 框架之 greenDAO
  4. Android鏃ヨ涔嬩竴
  5. Android(安卓)ADT插件很不稳定,DDMS总是
  6. Android(安卓)RxJava锛氭渶鍩虹鐨勬搷
  7. 銆奞t on Android鏍稿績缂栫▼銆嬪嫎璇?/
  8. Android如何集成Vitamio
  9. Android(安卓)澶氫釜APK鍏变韩鏁版嵁(Sha
  10. 手把手教你在CTS中编写自己的测试模块