Android Shader 颜色图像渲染paint.setXfermode

愿君学长松,慎勿作桃李。这篇文章主要讲述Android Shader 颜色图像渲染paint.setXfermode相关的知识,希望能为你提供帮助。

Android Shader 颜色图像渲染paint.setXfermode

文章图片




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
Android Shader 颜色图像渲染paint.setXfermode

文章图片



canvas.drawBitmap(mDstB, 0, 0, paint); //先绘制目标 paint.setXfermode(sModes[i]); // 使用mode
//paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

canvas.drawBitmap(mSrcB, 0, 0, paint); //再绘制源paint.setXfermode(null); //清除mode



【Android Shader 颜色图像渲染paint.setXfermode】   
















    推荐阅读