android 集结号Android开发今日看点

Android上如何实现矩形区域截屏

2017-01-06  本文已影响4667人  十个雨点

转载注明出处:简书-十个雨点

对屏幕进行截屏并裁剪有两种方式:早截图和晚截图。早截图,就是先截取全屏,再让用户对截取到的图片进行修改;与之相对的,晚截图,就是先让用户在屏幕上划好区域,再进行截图和裁剪。其实两者并没有什么太大的区别,这篇就说说怎么实现晚截图。

晚截图可以分成三步:

  1. 在屏幕上标出截图的矩形区域
  2. 调用系统接口截屏
  3. 对截图进行裁剪

效果图如下:

带NavigationBar使用系统截图的结果

那么如果我们想要对截图的结果进行保存或者裁剪,就必须要去除边框,找出真正的内容区域,也就是在第一个不透明的像素和最后一个不透明像素之间的内容,然后才能对得到的区域进行第三步的裁剪,代码如下:

int[] pixel=new int[width];
bitmap.getPixels(pixel,0,width ,0,0,width,1);
int leftPadding=0;
int rightPadding=width;
for (int i=0;i<pixel.length;i++){
    if (pixel[i]!=0){
        leftPadding=i;
        break;
    }
}
for (int i=pixel.length-1;i>=0;i--){
    if (pixel[i]!=0){
        rightPadding=i;
        break;
    }
}
bitmap=Bitmap.createBitmap(bitmap,leftPadding, 0, rightPadding-leftPadding, height);

处理后的截图如下:

取得截图结果的内容部分

你可能会觉得既然是rowPadding!=0导致出现边框,而且边框只在右边,为什么不直接把右边rowPadding宽度的内容截掉呢?其实是因为如果不调整windowHeight,就会在左边也产生框,所以才用了上面的方法。

完整代码可以参考Bigbang项目的MarkSizeView类、ScreenCaptureActivity类和ScreenCapture类。
相关文章:

如何在Bitmap截取任意形状
Android如何判断NavigationBar是否显示(获取屏幕真实的高度)

版权印为您的作品印上版权87337536
免费授权转载

上一篇下一篇

猜你喜欢

热点阅读