android开发之framebuffer截屏,G14真机测试成功

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;// 字深,多少字节表示一个像素

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值