美文网首页android 集结号Android开发今日看点
Android上如何实现矩形区域截屏

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

作者: 十个雨点 | 来源:发表于2017-01-06 11:30 被阅读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
    免费授权转载

    相关文章

      网友评论

      本文标题:Android上如何实现矩形区域截屏

      本文链接:https://www.haomeiwen.com/subject/peyhmttx.html