android 截图

简介: 引用:http://wiseideal.iteye.com/blog/1250175 (根据王研科先生的探索)Android G1手机的色深是16bit, 即R/G/B=5/6/6. 故需要一些特殊处理才能获得其屏幕图像。

引用: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图像数据:
    原理如下:

int main ( int argc,  char *argv [ ] )
{
     unsigned  short in;        // 16bit
     unsigned  char out [ 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.xmp  screenshot.png

现在可以用以下命令查看截屏(screenshot.png文件)啦:
  $ /usr/bin/display  screenshot.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

相关文章
|
4月前
|
XML 编解码 Android开发
Android各种各样的Drawable-更新中
Android各种各样的Drawable-更新中
59 0
|
Java Android开发 iOS开发
Android 录屏原来可以这么优雅
Android 录屏原来可以这么优雅
499 0
|
XML Android开发 数据格式
Android 10.0 截屏流程
Android 10.0 截屏流程
|
Shell Android开发
Android快速查看某个Activity的信息
Android中,如果能快速获取某个Activity的名称,我们就不用必须顺着代码逻辑,一步一步的去查找我们想查找的页面了,这就能极大的提高开发速度。
|
Android开发
Android 13 录屏流程
Android 13 录屏流程
|
网络协议 Linux Android开发
Android实现推送的那些事
推送定义:在任何时间地点服务端向客户端推送一条消息,如果客户端在线或者下次上线,就能接收到该消息。通常想到的实现方式是:轮询、tcp长连,其目的都是让服务端和客户端之间时刻保持在线状态对于客户端而言,轮询:无非是写个线程按某种配置的时间间隔无限循环去请求服务端是否有新的消息,当有新的消息,就提醒给.
2209 0
|
存储 编解码 算法
Android你不得不知道的图片压缩(一)
之前有个萌新在技术群里问图片压缩,然后我竟然还要查资料才回答他,没办法,谁让我也是个萌新,所以打算写一篇文章来复习一下图片相关的知识点。 一.URI 和 图片路径 一般来说从本地中拿到Bitmap就能展示图片到imageview,而且URI和图片在本地的路径都能拿到Bitmap,但是这两个不是同一个东西。
1139 0
|
安全 Android开发 数据格式
|
Android开发
Android 输入分析
注:本系列文章的中涉及到的 Android 版本为官方 5.1.1 版本源码。 整体输入相关的系统分析图如下图: Android系統分析.png 在上图中可以看出InputChannel在其中起到了承上启下的作用。
699 0