note
note copied to clipboard
Android 高效截图,读取 /dev/graphics/fb0 文件获取屏幕的Bitmap
之前提过一个Android截屏的方法 #2 就是通过执行系统自带 screencap 保存到SD卡,再从SD卡读取图片并转成Bitmap,这样会启动一个进程,耗费两次IO,速度很慢。
下面给出一个更高效的方法,将原来需要1500ms的截屏时间缩减到100ms。
这个方法是读取 读取 /dev/graphics/fb0 文件, 并将字节流转成rgb信息,并转成Bitmap,所有操作都是Java并在内容中,只有一个读取IO,没有启动进程,速度提升10倍以上。
FileInputStream graphics = null;
try {
graphics = new FileInputStream(“/dev/graphics/fb0”);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
DataInputStream dStream = new DataInputStream(graphics);
dStream.readFully(piex);
dStream.close();
int[] colors = new int[screenHeight * screenWidth];
// 将rgb转为色值
for (int m = 0; m < colors.length; m++) {
int r = (piex[m * 4] & 0xFF);
int g = (piex[m * 4 + 1] & 0xFF);
int b = (piex[m * 4 + 2] & 0xFF);
int a = (piex[m * 4 + 3] & 0xFF);
colors[m] = (a << 24) + (r << 16) + (g << 8) + b;
}
Bitmap bitmap = Bitmap.createBitmap(colors, screenWidth, screenHeight,
Bitmap.Config.ARGB_8888);
详细代码见 https://github.com/Yhzhtk/AiXiaoChu/blob/master/src/com/yh/aixiaochu/system/Screenshot.java
看起来不错的样子
用起来也不错
我测试了5个不同的手机, 只有小米1 才可以(不过依然是缺少颜色的) 你的这种方法类似google的android-screenshot-library,不过只对部分手机可以
我测试了5个不同的手机, 只有小米1 才可以(不过依然是缺少颜色的) 你的这种方法类似google的android-screenshot-library,不过只对部分手机可以
因为需要root
多谢回复