屏幕捕获输出格式

时间:2018-07-17 14:24:23

标签: android

我正在尝试在程序中使用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;
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

没有“ -p”选项的格式取决于文件扩展名:如果为“ .png”,则屏幕截图会自动保存为PNG。没有任何文件名的屏幕快照将打印到“ stdout”。我尝试了很多,最好是打印到“ stdout”,然后从那里直接读取位图像素,因为其他方法涉及“ screencap”保存到文件,然后您的应用程序应该阅读它“浪费很多时间”(两次操作均接近1.5秒)