持续捕捉Android屏幕以便在应用中处理

我需要一个实时流或某种方法来查看屏幕上当前显示的内容.
我不想将屏幕截图保存到文件,或录制视频等.
我不想将屏幕流式传输到另一台设备(我不想尝试截屏/ mirracast),我需要 Android应用程序本地的屏幕内容.

我为什么需要那个?

我想编写一个Android应用程序来管理一个lightpack,通过调整灯光到Android设备上显示的内容.

>要求root是好的(我希望root是必需的).
>也需要额外的低级别二进制文件.
>图像的质量不必像屏幕上那样精确,要低得多
决议仍然可以接受

如果你说不能这样做,你就错了.如果您下载适用于Android的Prismatik应用程序,您将看到我想要的确切内容,它会在抓取屏幕时屏幕抓取并管理我的lightpack而不会出现任何性能问题.我只想创建自己的类似的应用程序,除了我将它作为一个开源的GitHub项目…

编辑:我认为使用/ dev / graphics / fb0可能是答案的一部分.我不知道如何使用它的性能.

解决方法

我找到了自己问题的答案.

Android(linux也是)有一个帧缓冲文件(Android上的/ dev / graphics / fb0),你可以读取它包含整个屏幕内容的当前帧缓冲区.在大多数情况下,它实际上包含2帧用于双缓冲…当屏幕上的内容发生变化时,这个文件会不断变化(对于我想要用它的东西,它很好,我不需要对< ;毫秒内容,我只需要知道屏幕上显示的颜色是什么 此文件包含RAW格式的图形.在我的Galaxy S3上它每像素包含4bytes.
如果您需要知道应该读取多少字节来获取当前屏幕(仅1帧),您需要进行数学运算.我的屏幕是720×1280像素.

因此我需要阅读:

720 x 1280像素= 921,600像素

921,600像素*每像素4字节= 3,686,400字节

从中您可以提取每个颜色通道,并进行所需的计算.
读取数据的方法取决于您自己.您可以编写本机代码来读取缓冲区并进行操作.
或者您可以使用输入流从Android代码中读取缓冲区.

根据设备上加载的ROM,您可能需要root才能访问此文件(大多数情况下您需要root)

相关文章

AdvserView.java package com.earen.viewflipper; import an...
ImageView的scaleType的属性有好几种,分别是matrix(默认)...
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...