有趣的遮罩图片处理

xiaoxiao2021-02-28  107

在学习当中,发现图片处理有个遮罩的效果,可以通过遮罩,给予一张图片裁剪成想要的效果。

这是MaskImage .class

package com.iqinbao.android.imageprocessing; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.widget.ImageView; /**  * Created by admin on 2017/6/7.  */ public class MaskImage extends ImageView {     int mImageSource=0;             int mMaskSource=0;             RuntimeException mException;             public MaskImage(Context context, AttributeSet attrs){         super(context, attrs);         TypedArray a =getContext().obtainStyledAttributes(attrs, R.styleable.MaskImage,0,0);         mImageSource=a.getResourceId(R.styleable.MaskImage_image,0);         mMaskSource=a.getResourceId(R.styleable.MaskImage_mask,0);         if(mImageSource==0||mMaskSource==0){             mException=new IllegalArgumentException(a.getPositionDescription()+             ": The content attribute is required and must refer to a valid image.");             }         if(mException!=null)         throw mException;         /**                   * 主要代码实现                   */         //获取图片的资源文件                   Bitmap original = BitmapFactory.decodeResource(getResources(),mImageSource);         //获取遮罩层图片           Bitmap mask= BitmapFactory.decodeResource(getResources(),mMaskSource);         Bitmap result = Bitmap.createBitmap(mask.getWidth(),mask.getHeight(), Bitmap.Config.ARGB_8888);         //将遮罩层的图片放到画布中           Canvas mCanvas = new Canvas(result);         Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));//叠加重复的部分,显示下面的           mCanvas.drawBitmap(original,0,0,null);         mCanvas.drawBitmap(mask, 0, 0, paint);         paint.setXfermode(null);         setImageBitmap(result);         setScaleType(ScaleType.CENTER);         a.recycle();         } } 这是ac_main.xml  <com.iqinbao.android.imageprocessing.MaskImage         android:layout_width="wrap_content"         android:layout_height="wrap_content"         maskimage:image="@mipmap/qw010010246"         maskimage:mask="@mipmap/duojinull"         /> 这是attrs.xml <declare-styleable name="MaskImage">                   <!-- Identifier for the image that represents the Imageview's content. -->                   <attr name="image" format="reference"/>                   <!-- crop Imageview's content same as mask -->                            <attr name="mask" format="reference"/>     </declare-styleable> 效果图

转载请注明原文地址: https://www.6miu.com/read-56973.html

最新回复(0)