我试过了 :
process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0 > /sdcard/frame.raw"); process.waitFor();
但它不工作.我的设备是有根的.
我看到许多答案,它需要rooted访问,但没有实际的代码来获取framebuffer.
我也试过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,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,Bitmap.Config.RGB_565); bitmap.setPixels(pixelsBuffer,screenshotSize - width,-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"); }
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。