命令比“adb shell screencap”更快?

时间:2017-05-10 18:40:20

标签: android shell adb

我正在使用以下命令捕获Android模拟器屏幕:

  

adb shell screencap -p /sdcard/screencap.png

但执行命令并保存png文件需要500ms,有更快的方法来捕获屏幕数据?我不需要PNG文件本身,只需要'图像数据',因为我只是创建PNG并将其加载到.NET Bitmap类中以读取像素颜色。

我需要一种更快的方式来捕获图像,因为我需要每秒10个模拟器屏幕图像与之交互,因此录制屏幕以生成视频文件对我来说不是一个“解决方案”。 p>

由于

5 个答案:

答案 0 :(得分:2)

旧问题,但您可以尝试adb shell screencap screen.dump。这将跳过将文件转换为png的步骤,并将生成一个可以十六进制读取的文件。

有12个字节的标题,然后文件以位置(0,0)(左上角)的像素颜色开始为RGBA。

文件的最终大小取决于显示器的大小。

答案 1 :(得分:0)

AFAIK,除了您在目标设备上编写并运行应用程序之外,不存在这种方式。然后通过网络发回。在模拟器情况下,使用adb forward

有关详细信息,请参阅createVirtualDisplay

答案 2 :(得分:0)

您可以使用adb shell screencap -j /sdcard/screencap.jpg

它将以jpg格式保存图像,对我来说,该速度几乎是png的3倍。

答案 3 :(得分:0)

<块引用>

我真的不需要PNG文件本身,只需要“图像数据”

如果您不想保存文件,则无需指定图片位置:

adb shell screencap -p

图像数据是 PNG 格式,打印为字节数组。这与使用 adb 命令可以获得的速度一样快(在我的带有 Bluestacks 4.2 的 PC 上通常为 150 毫秒)。

如果您仍然想要更快的速度,这种使用 win32 api 的方法可能是最快的。您需要确保您的模拟器窗口设置为正确的大小并且在屏幕上可见。

答案 4 :(得分:-3)

我还与Memu模拟器一起用于图像识别。 如果您使用的是Windows,则可以使用各种工具来编写Memu窗口特定句柄的屏幕截图功能。

我通过调用本机Windows函数获得大约24-36FPS的屏幕截图。