引用:
(根据王研科先生的探索)
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/fb02. 把文件拷贝到PC上的/tmp目录: $ adb pull /mnt/sdcard/fb0 /tmp/fb03. 从/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/fb0PC侧:$ 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