愿君学长松,慎勿作桃李。这篇文章主要讲述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
文章图片
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】
推荐阅读
- Android OOM的解决方式
- Android 系统开发Android JNI 之 JNIEnv 解析
- 如何在Ubuntu 16.04 LTS上安装Ruby()
- 如何在Ubuntu 16.04 LTS上安装Python()
- 如何在Ubuntu 16.04中安装PHP7()
- 如何在Ubuntu 16.04 LTS上安装MySQL()
- 如何在Ubuntu 16.04中安装MongoDB()
- 如何在Ubuntu 16.04 LTS中安装MariaDB()
- 如何在Ubuntu 16.04 LTS中安装Java()