zoukankan      html  css  js  c++  java
  • 裁剪圆形图片原理

    现在有很多圆形图片的库,用来做用户头像等等,那么它的原理是什么呢,其实很简单。

    BitMapUtil
    public class BitMapUtil {
        /**
         * 图片缩放
         * wf.wh必须不能是int
         *
         * @param source
         * @param wf
         * @param hf
         * @return
         */
        public static Bitmap zoom(Bitmap source, float wf, float hf) {
            Matrix matrix = new Matrix();
            float sx = wf / source.getWidth();
            float sy = hf / source.getHeight();
            Log.e("zoubo", "sx---:" + sx);
            matrix.postScale(sx, sy);
            return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
        }
        /**
         * 头像圆形裁剪
         *
         * @param source
         * @return
         */
        public static Bitmap circleBitMap(Bitmap source) {
            final Paint paint = new Paint();
            //抗锯齿效果
            int width = source.getWidth();
            paint.setAntiAlias(true);
            //指定大小bitmap
            Bitmap target = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
            //根据target生成一个画布
            Canvas canvas = new Canvas(target);
            //在画布上画了一个圆
            //参数CX,cy-->确定绘制圆的圆心点
            //半径参数
            //画笔
            canvas.drawCircle(width / 2, width / 2, width / 2, paint);
            //这句话是关键:
            //分析:我们以一张图片作为画布,在上面画了一个圆-->画图展示-->"这时候,绘制的圆和图片本身就出现了一个圆形的交集图案"
            //setXfermode:设置当绘制的图像出现相交情况时候的处理方式的,它包含的常用模式有哪几种
            //PorterDuff.Mode.SRC_IN 取两层图像交集部门,只显示上层图像,注意这里是指取相交叉的部分,然后显示上层图像
            //PorterDuff.Mode.DST_IN 取两层图像交集部门,只显示下层图像
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
            //使用设置了setXfermode方案的paint绘制图像
            canvas.drawBitmap(source, 0, 0, paint);
            return target;
        }
    }
    

      

    运用:
     
    Bitmap decodeFile =BitmapFactory.decodeFile(pathResult);
    Bitmap zoomBitmap =BitMapUtil.zoom(decodeFile,UIUtils.dp2px(62),UIUtils.dp2px(62));//可以是控件宽高
    

      

     
  • 相关阅读:
    [java核心篇02]__内部类
    iOS学习之MVC,MVVM,MVP模式优缺点
    iOS MVC、MVP和MVVM理解
    网络常见的9大命令
    计算机网络基础知识总结
    iOS面试常见问题和知识点汇总
    NSMutableArray 删除可变数组元素
    iOS之集成GoogleMap定位、搜索注意事项
    iOS 13-Sign In with Apple
    Lipo移除ORC架构
  • 原文地址:https://www.cnblogs.com/sixrain/p/6510122.html
Copyright © 2011-2022 走看看