Android图像处理技术(实现Android中的PS)(5)
Android图像处理技术(实现Android中的PS)(五)
好快,今天已经是关于Android图片处理技术的第五个博客了,有点多了,主要是为了照顾一下基础比较薄弱的同学。不过我们都是用一个连贯的例子来讲解的,并且提供了带有详细注释的Demo,通过前四个博文的学习,想必大家对图片处理技术有所了解了,从本博文开始,只贴出关键代码段,其他无关紧要的代码(比如xml布局文件)就不贴了,我会附上一个Demo,大家可以下载参考。(PS:收取一个积分值是希望大家能珍惜下载的代码,毕竟是我一行一行写的,也算是对我自己工作的尊重吧,还请大家见谅。。。)
好了,废话不多说,开始我们今天的讲解:使用画笔风格Xfermode和Shader实现对图片的处理。
首先,效果展示:
首先我们先介绍一下Xfermode:
然后再介绍一下Shader:
下面我们来贴出使用Xfermode改变图片的主要代码:
自定义XfermodeView:
public class XfermodesView extends View{
private Bitmap mBitmap,mOutBitmap;
private Paint mPaint;
public XfermodesView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView(){
//关掉硬件加速,否则达不到预期的效果;
setLayerType(LAYER_TYPE_SOFTWARE, null);
//从资源中加载图片
mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.a);
mOutBitmap=Bitmap.createBitmap(mBitmap.getWidth(),mBitmap.getHeight(),Config.ARGB_8888);//Config.ARGB_8888 防锯齿
Canvas canvas=new Canvas(mOutBitmap);
mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
//Dst
//这些都很简单的了。。
canvas.drawRoundRect(new RectF(50, 50, mBitmap.getWidth(), mBitmap.getHeight()), 50, 50, mPaint);
//Src
//设置模式:
mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(mBitmap, 0,0, mPaint);
//还原mPaint
mPaint.setXfermode(null);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mOutBitmap,0,0,null);
}
}
我想,如果看过前几个博文,这个代码没什么难度。
然后再看看怎样自定义ShaderView:
public class BitmapShaderView extends View {
private Bitmap mBitmap;
private Paint mPaint;
private BitmapShader mShader;
public BitmapShaderView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint=new Paint();
mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.a);
//设置Shader模式:
mShader=new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//将设置好的shader绑定到画笔mPaint上面
mPaint.setShader(mShader);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(200, 200, 50, mPaint);
}
}
ok,结束。
最后,Demo地址:http://download.****.net/detail/nsgsbs/8538579