Я работаю над корневым устройством Android. Я пытаюсь захватить экран и сохранить результат в Bitmap
для последующего использования.
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath();
path += "/img.png";
Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + path).getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor();
final Bitmap x = BitmapFactory.decodeFile(path);
Что я здесь делаю, это именовать путь для нового изображения и захватывать экран с помощью команды /system/bin/screencap -p FILEPATH
. Затем я прочитал изображение, которое я записал в этом файле, и использую его в растровом изображении.
Моя проблема с моим текущим кодом заключается в том, что он медленный (не подходит для приложения реального времени). Сейчас я пытаюсь сделать это быстрее. Вместо того, чтобы сохранять захваченное изображение в файл и затем снова читать его из программы, я хочу прочитать его непосредственно из результата Runtime.getRuntime().exec(...)
В описании команды screencap я обнаружил, что могу использовать ее без указания имени выходного файла, и в этом если результаты будут напечатаны на стандартный вывод.
Я попробовал несколько кодов, чтобы прочитать массив байтов результата, чтобы использовать его непосредственно в моем коде
final Bitmap x = BitmapFactory.decodeByteArray(resultArrayByte, 0, resultArrayByte.length);
но ни один из кодов не работал со мной.
Как я могу использовать потоки ввода/вывода sh
, чтобы получить массив байтов результата напрямую, не сохраняя вывод в файл, а затем загружая его снова?