您的位置:首页 > 移动开发 > Android开发

Android图像处理(四)Xfermode和BitmapShader

2016-06-03 15:55 465 查看
Xfermode



先画的为Dst

后画的为Src

只适用于具有alpha通道的图片

圆角矩形

public class RoundRectXfermodeView extends View {

private Bitmap mBitmap;
private Bitmap mOut;
private Paint mPaint;

public RoundRectXfermodeView(Context context) {
super(context);
initView();
}

public RoundRectXfermodeView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}

public RoundRectXfermodeView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}

private void initView() {

//禁用硬件加速
setLayerType(LAYER_TYPE_SOFTWARE, null);

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test1);

mOut = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(mOut);

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

//Dst 遮罩层
canvas.drawRoundRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight(), 50, 50, mPaint);

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

//Src
canvas.drawBitmap(mBitmap, 0, 0, mPaint);

mPaint.setXfermode(null);

}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mOut, 0, 0, null);
}
}


画笔风格----Shader 着色器 渲染器

渐变风格

线性渐变

环形渐变

扫描渐变

组合渐变

REPEAT



MIRROR



public class BitmapShaderView extends View {

private Bitmap mBitmap;
private Paint mPaint;
private BitmapShader mBitmapShader;

public BitmapShaderView(Context context) {
super(context);
}

public BitmapShaderView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public BitmapShaderView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
protected void onDraw(Canvas canvas) {

mPaint = new Paint();

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
//        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
//        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test1);

//拉伸 对最下面一个像素进行拉伸
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//重复
//        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
//镜像 MIRROR
//        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);

//绑上图章
mPaint.setShader(mBitmapShader);

//        canvas.drawCircle(300, 200, 150, mPaint);
canvas.drawCircle(600, 200, 200, mPaint);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: