ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android将Bitmap缩放到指定大小,并可兼容特殊机型,如三星、一加手机等

2021-03-13 16:02:36  阅读:203  来源: 互联网

标签:一加 matrix 机型 int bm Bitmap Android 兼容


一、原始需求

  1.将两张图片(Bitmap)进行融合叠加,得到一个半透明的蒙版覆盖再图片上,而被叠加的图片必须和蒙版大小一样。其实这需求是比较简单的,有很多方法都可以实现。之所以写一写是因为这里面有机型兼容的坑。

  而且网上几乎没有提到过这个坑。ps:可能机型太少没测试到。

二、使用到的工具

  1.不成熟的方案:ps:不能兼容特殊机型,如一加手机,三星手机等。这个中方案不管是在小米、华为、oppo、vivo上都没有多大的毛病,但是如上的两种特殊的机型不行(或许还有其他的不过测试部没那么多测试机)

  

    public static Bitmap zoomImg(Bitmap bm, int newWidth ,int newHeight){
        // 获得图片的宽高
        int width = bm.getWidth();
        int height = bm.getHeight();
        // 计算缩放比例
        float scaleWidth = 1.0f*newWidth / width;
        float scaleHeight = 1.0f*newHeight / height;
        // 取得想要缩放的matrix参数
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        // 得到新的图片
        Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
//        Bitmap newbm = Bitmap.createScaledBitmap(bm,newWidth,newHeight,true);
        return newbm;
    }

  2.相对成熟的方案:ps:可兼容绝大多数的机型,包括一些特殊的机型,如一加手机、三星手机。

private static Bitmap zoomImg2(Bitmap bm, int targetWidth, int targetHeight) {
        int srcWidth = bm.getWidth();
        int srcHeight = bm.getHeight();
        float widthScale = targetWidth * 1.0f / srcWidth;
        float heightScale = targetHeight * 1.0f / srcHeight;
        Matrix matrix = new Matrix();
        matrix.postScale(widthScale, heightScale, 0, 0);
        // 如需要可自行设置 Bitmap.Config.RGB_8888 等等
        Bitmap bmpRet = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bmpRet);
        Paint paint = new Paint();
        canvas.drawBitmap(bm, matrix, paint);
        return bmpRet;
    }

  三、总结

  强烈建议用第二种方案,因为第二种方案是最稳健的,所有的东西都需要自行实现,其Api可以兼容到4.x的版本,非常稳定。

标签:一加,matrix,机型,int,bm,Bitmap,Android,兼容
来源: https://www.cnblogs.com/tony-yang-flutter/p/14529159.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有