我正在使用以下命令捕获Android模拟器屏幕:
adb shell screencap -p /sdcard/screencap.png
但执行命令并保存png文件需要500ms,有更快的方法来捕获屏幕数据?我不需要PNG文件本身,只需要'图像数据',因为我只是创建PNG并将其加载到.NET Bitmap类中以读取像素颜色。
我需要一种更快的方式来捕获图像,因为我需要每秒10个模拟器屏幕图像与之交互,因此录制屏幕以生成视频文件对我来说不是一个“解决方案”。 p>
由于
答案 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的屏幕截图。