我不想将屏幕截图保存到文件,或录制视频等.
我不想将屏幕流式传输到另一台设备(我不想尝试截屏/ 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)