2012-09-09 14:08:30
嘿嘿,过完教师节再补文章。纠结了4,5天了,终于把ARGB_8888真机截屏搞定。当然参考了很多网上的代码,有ndk,有sdk的,编译之后真机测试都不成功,这些程序能截屏但截屏图片偏移。最后终于发现了其中的奥义!~~~~~
int count=0;
for (int i = 4, j = 0; j < height * width; ++i, ++j) {
if (count == 540) {
count = 0;
i += 4;
}
red = (int) (data[i * 4] & 0x000000FF);
green = (int) (data[i * 4 + 1] & 0x000000FF);
blue = (int) (data[i * 4 + 2] & 0x000000FF);
colors[j] = 0xFF000000 | (red << 16) | (green << 8) | blue;
count++;
}
像我的G14手机fb0文件里的像素数 每行的头16个字节都是标示用的,并不是真正的像素数据,把它们剔除后所截屏的图片则都是正常的。上面的代码是把byte数组转换成int数组,并剔除了行首标示字节。fb0里的数据可以用inputstream读取哦
下面代码可以获取android屏幕的像素格式,用于转换
DisplayMetrics metrics = new DisplayMetrics();
WindowManager WM = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
Display display = WM.getDefaultDisplay();
display.getMetrics(metrics);
// 获取显示方式
height = metrics.heightPixels; // 屏幕高
width = metrics.widthPixels; // 屏幕的宽
int pixelformat = display.getPixelFormat();//像素格式返回0-x,需要对比才知道像素格式
PixelFormat localPixelFormat = new PixelFormat();
PixelFormat.getPixelFormatInfo(pixelformat, localPixelFormat);
deepth = localPixelFormat.bytesPerPixel;// 字深,多少字节表示一个像素