我认为,最简单的方法是转换为HSV,在该处进行变暗,然后转换回原位:
float[] hsv = new float[3];int color = getColor();Color.colorToHSV(color, hsv);hsv[2] *= 0.8f; // value componentcolor = Color.HSVToColor(hsv);
为了减轻负担,一种简单的方法可能是将值分量乘以> 1.0。但是,您必须将结果限制在[0.0,1.0]范围内。同样,简单地相乘不会减少黑色。
因此,一个更好的解决方案是:将值分量的差从1.0减小以减小:
hsv[2] = 1.0f - 0.8f * (1.0f - hsv[2]);
这与暗化方法完全平行,只是使用1作为原点而不是0。它可以使任何颜色(甚至黑色)变亮,并且不需要任何钳位。可以简化为:
hsv[2] = 0.2f + 0.8f * hsv[2];
但是,由于浮点运算的舍入效应,我担心结果可能超过1.0f(可能是一位)。最好坚持使用稍微复杂一些的公式。



