首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何在rooted设备上获取framebuffer (截图)?

Android:如何在rooted设备上获取framebuffer (截图)?
EN

Stack Overflow用户
提问于 2011-02-15 07:28:04
回答 2查看 7.5K关注 0票数 11

我试过了:

代码语言:javascript
复制
process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0 > /sdcard/frame.raw");
process.waitFor();

但它不起作用。我的设备是有根的。

我看到许多答案,它需要根访问,但没有实际的代码来获得帧缓冲区。

我也尝试了glReadPixels(),但没有成功。

代码语言:javascript
复制
public void TakeScreen() {

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels;
        int height = dm.heightPixels;

        int screenshotSize = width * height;
        ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4);
        bb.order(ByteOrder.nativeOrder());
        gl.glReadPixels(0, 0, width, height, GL10.GL_RGBA,
                GL10.GL_UNSIGNED_BYTE, bb);
        int pixelsBuffer[] = new int[screenshotSize];
        bb.asIntBuffer().get(pixelsBuffer);
        bb = null;
        Bitmap bitmap = Bitmap.createBitmap(width, height,
                Bitmap.Config.RGB_565);
        bitmap.setPixels(pixelsBuffer, screenshotSize - width, -width, 0, 0,
                width, height);
        pixelsBuffer = null;

        short sBuffer[] = new short[screenshotSize];
        ShortBuffer sb = ShortBuffer.wrap(sBuffer);
        bitmap.copyPixelsToBuffer(sb);

        for (int i = 0; i < screenshotSize; ++i) {
            short v = sBuffer[i];
            sBuffer[i] = (short) (((v & 0x1f) << 11) | (v & 0x7e0) | ((v & 0xf800) >> 11));
        }
        sb.rewind();
        bitmap.copyPixelsFromBuffer(sb);
        saveBitmap(bitmap, "/screenshots", "capturedImage");
    }
EN

回答 2

Stack Overflow用户

发布于 2011-08-07 10:08:57

答案在于复制设备本身处理它的方式:

图形fb =

(“/dev/graphics/fb0”,O_RDONLY);

检查this

票数 0
EN

Stack Overflow用户

发布于 2011-08-07 10:30:04

在我看来,你的问题是这个标志:>。不能使用exec重定向输出。你需要做的就是抓取进程的输出流(这就是你的输入流)并将其存储到文件中;

代码语言:javascript
复制
process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
InputStream is = process.getInputStream();
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4998527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档