Android中将方形图片截取成圆形的两种实现方式

以下两种方法均有不足,仅供参考

第一种实现方式是通过设置画笔的渲染方式对图片进行处理:

首先要了解几种渲染方式
Shader的几个子类
1.BitmapShader(图像渲染)
  BitmapShader的作用是使用一张位图作为纹理来对某一区域进行填充。可以想象成在一块区域内铺瓷砖,只是这里的瓷砖是一张张位图而已。
  
2.LinearGradient(线性渲染)
  LinearGradient的作用是实现某一区域内颜色的线性渐变效果。
  
3.ComposeShader(混合渲染)
  ComposeShader的作用是实现渲染效果的叠加,如BitmapShader与LinearGradient的混合渲染效果等。

4.RadialGradient(环形渲染)
  RadialGradient的作用是在某一区域内实现环形的渐变效果。
  
5.SweepGradient(梯度渲染)
  SweepGradient也称为扫描渲染,是指在某一中心以x轴正方向逆时针旋转一周而形成的扫描效果的渲染形式。

    public Bitmap drawCircleView01(Bitmap bitmap) {
        //这里可能需要调整一下图片的大小来让你的图片能在圆里面充分显示
        bitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true);
        //构建一个位图对象,画布绘制出来的图片将会绘制到此bitmap对象上
        Bitmap bm = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
        //构建一个画布,
        Canvas canvas = new Canvas(bm);
        //获得一个画笔对象,并设置为抗锯齿
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        //获得一种渲染方式对象
        //BitmapShader的作用是使用一张位图作为纹理来对某一区域进行填充。
        //可以想象成在一块区域内铺瓷砖,只是这里的瓷砖是一张张位图而已。
        Shader shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
        //设置画笔的渲染方式
        paint.setShader(shader);
        //通过画布的画圆方法将渲染后的图片绘制出来
        canvas.drawCircle(100, 100, 100, paint);
        //返回的就是一个圆形的bitmap对象
        return bm;
    }

第二种方法是通过绘制出两个图形,然后在他们的交集区域显示需要裁剪的图片:

Porter-Duff 效果图

    public Bitmap drawCircleView02(Bitmap bitmap){

        //前面同上,绘制图像分别需要bitmap,canvas,paint对象
        bitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true);
        Bitmap bm = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
        Canvas canvas = new Canvas(bm);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        //这里需要先画出一个圆
        canvas.drawCircle(100, 100, 100, paint);
        //圆画好之后将画笔重置一下
        paint.reset();
        //设置图像合成模式,该模式为只在源图像和目标图像相交的地方绘制源图像 
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, 0, 0, paint);
        return bm;
    }

附上最后绘制出来的效果图:
效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值