码迷,mamicode.com
首页 > 移动开发 > 详细

Android Shader 颜色、图像渲染

时间:2015-07-16 19:47:36      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:android   shader   

技术分享


Shader 

       Shader是一个基类,表示在绘制期间颜色的水平跨度

       它的子类被嵌入在Paint中使用,调用paint.setShader(shader)。

       除Bitmap外的其它对象,使用该Paint进行绘制时,将从shader中获得颜色


Shader.TileMode 渲染模式

public enum TileMode { 
    CLAMP   (0),
    REPEAT  (1),
    MIRROR  (2);
    TileMode(int nativeInt) {
        this.nativeInt = nativeInt;
    }
    final int nativeInt;
}
  CLAMP:如果超出原始bounds(即原图的边界),则重复边缘上的color

  REPEAT:重复bitmap

  MIRROR:重复bitmap,与REPEAT不同的时,它是镜像重复,即:反向重复


Shader 子类:   

   BitmapShader (android.graphics)  图像渲染
   ComposeShader (android.graphics)  组合渲染
   LinearGradient (android.graphics)  线性渲染
   RadialGradient (android.graphics)   环形渲染
   SweepGradient (android.graphics)  扫描渲染


BitmapShader

   new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR); 以某个渲染模式 进行 图像渲染


ComposeShader

   new ComposeShader(shaderA, shaderB, PorterDuff.Mode.DST); 组合两种渲染效果,以PorterDuff.Mode进行组合


LinearGradient

  new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), 0x470000ff,0xefffff00, Shader.TileMode.CLAMP); 

      在一定区域内,以某种渲染模式,进行两种颜色间的线性变化

  new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), new int[]{0xffabc777, 0x2300ff00, 0x470000ff, 0xefffff00}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);

     在一定区域内,以某种渲染模式,进行一组颜色间的线性变化,变化的位置由float数组决定。要求int数组和float数组,长度一致

  

RadialGradient

   以点(x,y),半径为r,进行环形渲染

   new RadialGradient(w/2, h/2, Math.min(w, h) /2, 0xddff00f0, 0xffabc777, Shader.TileMode.REPEAT);

   new RadialGradient(w/2, h/2, Math.min(w, h) /2, new int[]{0xddff0000, 0x2300ff00, 0x470000ff, 0xffabc777}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);


SweepGradient

  以点(x,y),进行扫描渲染 

   new SweepGradient(w/2, h/2, 0xddff00f0, 0xffabc777);

   new SweepGradient(w, h, new int[]{0xffff0000, 0xff00ff00, 0xff0000ff, 0xffabc777, 0xffee00ee}, new float[]{0.2f, 0.4f, 0.6f, 0.75f, 1f});


PorterDuff.Mode

技术分享

canvas.drawBitmap(mDstB, 0, 0, paint);//先绘制目标
paint.setXfermode(sModes[i]);// 使用mode
canvas.drawBitmap(mSrcB, 0, 0, paint);//再绘制源
paint.setXfermode(null);//清除mode

  

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Shader 颜色、图像渲染

标签:android   shader   

原文地址:http://blog.csdn.net/jjwwmlp456/article/details/46912561

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!