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

时间:2014-07-21 09:42:32

标签: android screen-scraping

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

为什么我需要它?

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

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

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

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

1 个答案:

答案 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)