您的位置:首页 > 移动开发 > Android开发

android通过读取/dev/graphics/fb0文件解析出系统界面的图片

2013-07-25 08:37 561 查看
在网上找了一些读取/dev/graphics/fb0文件的办法并解析出图片的办法。大部分都是比较笼统一点的,经过一些网上示例和研究,找到个比较简单的办法读取解析数据

当然目前读取系统文件还是需要先将机器进行root后才能读取,具体怎么root,有很多种办法和工具的

root完成后,先通过代码将/dev/graphics/fb0文件修改为可读的权限

ShellUtil.getInstance().rootCommand(

"chmod 777 /dev/graphics/fb0\n");

修改完成后,直接通过java代码就可以读取文件内容了

FileInputStream buf = new FileInputStream(new File("/dev/graphics/fb0"));// 读取文件内容

读取文件数据后,就可以在数据中提取图片rgb,转换成可视的图片,具体代码如下:

DisplayMetrics dm = new DisplayMetrics();

Display display = getWindowManager().getDefaultDisplay();

display.getMetrics(dm);

int screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)

int screenHeight = dm.heightPixels; // 屏幕高(像素,如:800p)

int pixelformat = display.getPixelFormat();

PixelFormat localPixelFormat1 = new PixelFormat();

PixelFormat.getPixelFormatInfo(pixelformat, localPixelFormat1);

int deepth = localPixelFormat1.bytesPerPixel;// 位深

byte[] piex = new byte[screenHeight * screenWidth * deepth];// 像素

DataInputStream dStream = new DataInputStream(buf);

dStream.readFully(piex);

int[] colors = new int[screenHeight * screenWidth];

// 将rgb转为色值

for (int m = 0; m < colors.length; m++) {

int b = (piex[m * 4] & 0xFF);

int g = (piex[m * 4 + 1] & 0xFF);

int r = (piex[m * 4 + 2] & 0xFF);

int a = (piex[m * 4 + 3] & 0xFF);

colors[m] = (a << 24) + (r << 16) + (g << 8) + b;

}

// 得到屏幕bitmap

return Bitmap.createBitmap(colors, screenWidth, screenHeight,

Bitmap.Config.ARGB_4444);

代码比较多,如需下载完整项目示例的,下载这个地址
http://download.csdn.net/detail/wuchao5555/5678367
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: