绘图的色彩矩阵
这里 我只是大概写一下,大姐想具体看的,可以去看这位大神的博客
生成色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 0.5, 0,
});
mPaint.setARGB(255,200,100,100);
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0,
});
mPaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
- 如果这样设置之后我们的画笔就会只取刚才设置的那个颜色的完整蓝色和透明度部分,计算方法根据矩阵相乘的方法
- 效果是,如果不设置色彩矩阵,就会是粉色,如果设置了之后,就会完全变成蓝色,也就是将色彩中的蓝色单独拿出来
- 跟着人家博客看了一下,如果你用来画图片的话,也会只取到图片的蓝色元素 有以下安卓为我们提供的色彩设置方法
//整体增强颜色饱和度,即同时增强R,G,B的色彩饱和度
public void setSaturation(float sat)
//设置每个颜色的缩放程度
public void setScale(float rScale, float gScale, float bScale,float aScale)
/**
设置色彩旋转
* 将旋转围绕某一个颜色轴旋转
* axis=0 围绕红色轴旋转
* axis=1 围绕绿色轴旋转
* axis=2 围绕蓝色轴旋转
*/
public void setRotate(int axis, float degrees);
public LightingColorFilter(int mul, int add)
结果R值 = (r*mul.R+add.R)%255;
结果G值 = (g*mul.G+add.G)%255;
结果B值 = (b*mul.B+add.B)%255;
//我们可以用上述方法来直接将某个色彩的某种颜色给直接设置为 0 即去掉某种色彩或者只取某种色彩
前面的颜色缩放表示设置为0表示直接去掉某种色彩,设置为255表示某种色彩不做变化
后面的颜色加值表示在某种色彩的程度加上某个值
如
mPaint.setColorFilter(new LightingColorFilter(0x00ff00,0x000000));
就是只拿到Green分量
public PorterDuffColorFilter(int srcColor, PorterDuff.Mode mode)
/**
int srcColor:0xAARRGGBB类型的颜色值。
PorterDuff.Mode mode:表示混合模式,枚举值有18个,表示各种图形混合模式,有:
Mode.ADD(饱和度相加),Mode.DARKEN(变暗),Mode.LIGHTEN(变亮),Mode.MULTIPLY(正片叠底),Mode.OVERLAY(叠加),Mode.SCREEN(滤色)
*/