Android图像处理技术(实现Android中的PS)(五)

好快,今天已经是关于Android图片处理技术的第五个博客了,有点多了,主要是为了照顾一下基础比较薄弱的同学。不过我们都是用一个连贯的例子来讲解的,并且提供了带有详细注释的Demo,通过前四个博文的学习,想必大家对图片处理技术有所了解了,从本博文开始,只贴出关键代码段,其他无关紧要的代码(比如xml布局文件)就不贴了,我会附上一个Demo,大家可以下载参考。(PS:收取一个积分值是希望大家能珍惜下载的代码,毕竟是我一行一行写的,也算是对我自己工作的尊重吧,还请大家见谅。。。) 

好了,废话不多说,开始我们今天的讲解:使用画笔风格Xfermode和Shader实现对图片的处理。

首先,效果展示:

首先我们先介绍一下Xfermode:

然后再介绍一下Shader:

下面我们来贴出使用Xfermode改变图片的主要代码:

自定义XfermodeView:

{private Bitmap mBitmap,mOutBitmap;private Paint mPaint;public XfermodesView(Context context, AttributeSet attrs) {super(context, attrs);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);//还原mPaintmPaint.setXfermode(null);}(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(mOutBitmap,0,0,null);}}

我想,如果看过前几个博文,这个代码没什么难度。

然后再看看怎样自定义ShaderView:

{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);}(Canvas canvas) {super.onDraw(canvas);canvas.drawCircle(200, 200, 50, mPaint);}}

ok,,结束。

最后,Demo地址:

天下没有不散的宴席,也许这人间真的只有朦朦胧胧才是真。

Android图像处理技术(实现Android中的PS)(五)

相关文章:

你感兴趣的文章:

标签云: