我知道可以通过 ADB 从 Android 设备截取屏幕截图
$ adb shell screencap -p /mnt/sdcard/sc.png
$ adb pull /mnt/sdcard/sc.png
Run Code Online (Sandbox Code Playgroud)
但是,这会在您的手机和 PC 上写入一个文件,我想避免这种情况。
所以我发现了以下 SO 问题,答案表明当您不指定文件时,图像会打印到 Std 输出。我从控制台对此进行了测试,它确实将二进制数据打印到了控制台。
Android:有没有办法从内存中读取屏幕截图而不保存到内部/外部存储?
现在我想利用这种技术并从 java 启动一个进程,执行
adb shell screencap
Run Code Online (Sandbox Code Playgroud)
命令,读取输出并从输出创建一个 BufferedImage。
我试过这样的事情
ProcessBuilder pb = new ProcessBuilder("cmd");
Process start = pb.start();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
bw.write("adb shell screencap");
bw.newLine();
bw.flush();
// wait some time for the process to print the image to the console
start.waitFor(10, TimeUnit.SECONDS);
StringBuilder sb = new StringBuilder(9000000);
Scanner s = new Scanner(start.getInputStream());
while (s.hasNext()) {
sb.append(s.next());
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的代码存在很多问题。
获取屏幕截图后程序不会终止 - 所以 start.waitFor 并没有像我希望的那样工作
目前我的代码读取字符,我实际上想要读取字节
也许有人可以为我指出一个方向,以便我可以让它发挥作用。谢谢!
为什么要把事情复杂化。如果您正在调用adb并希望其输出运行
adb exec-out screencap -p > myimg.png
Run Code Online (Sandbox Code Playgroud)
exec-out用于代替shell获取原始数据(即图像)。
| 归档时间: |
|
| 查看次数: |
3998 次 |
| 最近记录: |