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

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

首先,效果展示:
Android图像处理技术(实现Android中的PS)(五)_第1张图片

首先我们先介绍一下Xfermode:
Android图像处理技术(实现Android中的PS)(五)_第2张图片

然后再介绍一下Shader:
Android图像处理技术(实现Android中的PS)(五)_第3张图片

下面我们来贴出使用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.csdn.net/detail/nsgsbs/8538579

更多相关文章

  1. 《深入探索Android热修复技术原理》安卓热修复原理宝典出炉,阿里
  2. 学习笔记之——Android中的Picasso实现圆形头像、圆角图片工具类
  3. ndroid显示在线图片
  4. Android 根据所给的图片位置获得Thumbnail
  5. Android HttpURLConnection上传图片至Servlet端指定目录
  6. Android开发之如何手写代码进行页面布局
  7. Android当中显示网络图片
  8. Android跳转淘宝商品详情页代码

随机推荐

  1. Android: 浅论虚拟SD卡的实现
  2. Android按钮样式(dmytrodanylyk)使用
  3. android 打开软键盘 关闭软键盘
  4. 帧布局
  5. Android获得系统时间(24小时制)
  6. Android中常用的函数
  7. android canvas中的save()和restore()的
  8. 2011.07.12——— android Foreground se
  9. 深入理解zygote——1(代码源于GooGle)
  10. Android之如何使用junit