我正在尝试在程序中使用Android中的/system/bin/screencapture
工具。我想将屏幕截图保存在Bitmap对象中。 (但是我知道其他方法,但是我的程序使用的是SurfaceView
,我无法更改它,因此互联网上找不到可用的方法。)
我发现使用-p
选项将其编码为png文件会花费太多时间。因此,我想使用不带-p
选项的输出。但是,我无法弄清楚输出使用什么格式。我尝试将其读入字节数组并使用BitmapFactory.decodeByteArray()
,但这似乎不起作用(方法仅返回null
。)
TL; DR:不使用/system/bin/screencapture
选项(或写入以“ .png”结尾的文件名)时,-p
使用什么格式
以下是相关代码:
Bitmap bitmap = null;
try {
Runtime.getRuntime().exec("/system/bin/screencap /storage/emulated/0/storage/screencap");
try {
Thread.sleep(45);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.v("findMe", "Finished writing file");
byte[] data = new byte[0];
FileInputStream fis = new FileInputStream("/system/bin/screencap");
while(fis.available() > 0){
data = append_to_byte_arr(data, (byte) fis.read());
}
Log.d("findMe", data.length + " is data.length");
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
} catch (IOException ioe) {
Log.e("findMe", "you failed", ioe);
return;
}
//...
private byte[] append_to_byte_arr(byte[] arr, byte item) {
byte[] temp = new byte[arr.length + 1];
System.arraycopy(arr, 0, temp, 0, arr.length);
temp[arr.length] = item;
return temp;
}
感谢您的帮助。
答案 0 :(得分:0)
没有“ -p”选项的格式取决于文件扩展名:如果为“ .png”,则屏幕截图会自动保存为PNG。没有任何文件名的屏幕快照将打印到“ stdout”。我尝试了很多,最好是打印到“ stdout”,然后从那里直接读取位图像素,因为其他方法涉及“ screencap”保存到文件,然后您的应用程序应该阅读它“浪费很多时间”(两次操作均接近1.5秒)