如何使用/dev/graphics/fb0
捕获Android设备屏幕内容,以及如何使用从帧缓冲区收集的数据将其设为图像文件。我知道这需要设备根植,我对此感到满意。
提前致谢,
答案 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权限。
将数据从fb0复制到另一个文件,例如
cat fb0 > tmp
此时,您仍然无法打开新文件。 因为该文件的数据结构不能满足任何图像文件格式。 所以你需要的是解码它。在该文件中,每两个字节描述一个像素。 较高的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
结果缩略图也很有艺术性。