/sdcard/frame.raw"); proces-6ren">
gpt4 book ai didi

Android:如何在 root 设备上获取帧缓冲区(屏幕截图)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:31 26 4
gpt4 key购买 nike

我试过了:

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0 > /sdcard/frame.raw");
process.waitFor();

但它不起作用。我的设备已获得 root 权限。

我看到很多答案说它需要 root 访问权限,但没有实际代码来获取帧缓冲区。

我也试过 glReadPixels() 但没有成功。

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");
}

最佳答案

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

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
InputStream is = process.getInputStream();
...

关于Android:如何在 root 设备上获取帧缓冲区(屏幕截图)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com