我需要一个实时流或某种方法来查看屏幕上当前显示的内容。 我不想要将屏幕截图保存到文件中,或者录制视频等。 我不想将屏幕流式传输到另一台设备(我不想尝试截屏/ mirracast),我需要Android应用程序本地的屏幕内容。
为什么我需要它?
我想编写一个Android应用程序,通过调整灯光到Android设备上显示的内容来管理灯光。
如果你说它无法完成,你就错了。如果您下载适用于Android的Prismatik应用程序,您将会看到我想要的内容,它会在抓取屏幕时屏幕抓取并管理我的lightpack而不会出现任何性能问题。我只是想创建自己的类似的应用程序,除了我将它作为一个开源的GitHub项目...
编辑我认为使用/ dev / graphics / fb0可能是答案的一部分。我不知道如何使用它的性能。
答案 0 :(得分:0)
我找到了自己问题的答案。
Android(linux too)有一个帧缓冲文件(Android上的 / dev / graphics / fb0 ),您可以读取该文件包含整个屏幕内容的当前帧缓冲区。在大多数情况下,它实际上包含2帧用于双缓冲...当屏幕上的内容发生变化时,这个文件会不断变化(对于我想要用它的东西,它很好,我不需要对< ;毫秒内容,我只需要知道屏幕上显示的是什么颜色)
此文件包含RAW格式的图形。在我的Galaxy S3上它每像素包含4bytes。 如果您需要知道应该读取多少字节来获取当前屏幕(仅1帧),您需要进行数学运算。我的屏幕是720x1280像素。
因此我需要阅读:
720 x 1280像素= 921,600像素
921,600像素*每像素4个字节= 3,686,400字节
由此您可以提取每个颜色通道,并进行所需的计算。 读取数据的方法取决于您自己。您可以编写本机代码来读取缓冲区并进行操作。 或者,您可以使用输入流从Android代码中读取缓冲区。
根据您设备上加载的ROM,您可能需要root才能访问此文件(大多数情况下您需要root)