如何使用/ dev / graphics / fb0(Android)捕获屏幕

时间:2011-01-11 06:17:27

标签: android driver

如何使用/dev/graphics/fb0捕获Android设备屏幕内容,以及如何使用从帧缓冲区收集的数据将其设为图像文件。我知道这需要设备根植,我对此感到满意。

提前致谢,

5 个答案:

答案 0 :(得分:12)

这应该有效:

adb pull /dev/graphics/fb0 fb0
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 320x480 -i fb0 -f image2 -vcodec png image.png

答案 1 :(得分:5)

如果您拥有root权限。

  1. 将数据从fb0复制到另一个文件,例如

    cat fb0 > tmp
    
  2. 此时,您仍然无法打开新文件。 因为该文件的数据结构不能满足任何图像文件格式。 所以你需要的是解码它。在该文件中,每两个字节描述一个像素。 较高的5个比特代表红色,较低的5个比特代表蓝色,其余的中间6个比特代表绿色。您可以使用上面的信息来构建BMP和任何其他可见文件。

答案 2 :(得分:4)

Nebkat的解决方案有时会起作用,但是,在使用Dollop测试工具时,我了解到没有通用的方法直接从fb0制作图像。摩托罗拉Droid 2使用RGB 32.华为Ascend使用RGB 565.三星Captivate既不使用也不使用整个屏幕。

答案 3 :(得分:1)

对于16位设备,您可能希望将-pix_fmt rgb32替换为-pix_fmt rgb565le

答案 4 :(得分:1)

如果您不确定设备帧缓冲区的格式,可以按如下方式迭代ffmpeg支持的格式:

for fmt in $(ffmpeg -pix_fmts|cut -d " " -f 2); do ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt $fmt -s 320x480 -i fb0 -f image2 -vcodec png /tmp/image-$fmt.png; done

结果缩略图也很有艺术性。