如何使给定颜色变暗(int)

时间:2015-10-12 02:26:14

标签: android android-color

我有一个采用给定颜色的功能,我希望它能使颜色变暗(将亮度降低20%左右)。给出一个颜色(int),我无法弄清楚如何做到这一点。什么是正确的方法?

public static int returnDarkerColor(int color){
    int darkerColor = .... 
    return darkerColor;
}

7 个答案:

答案 0 :(得分:43)

更多Android方式:

    public static int manipulateColor(int color, float factor) {
        int a = Color.alpha(color);
        int r = Math.round(Color.red(color) * factor);
        int g = Math.round(Color.green(color) * factor);
        int b = Math.round(Color.blue(color) * factor);
        return Color.argb(a,
                Math.min(r,255),
                Math.min(g,255),
                Math.min(b,255));
    }

您需要使用小于1.0f的因子来变暗。试试0.8f

答案 1 :(得分:16)

还有一个更简单的解决方案,以前没有提到过,Android有一个名为ColorUtils的类,可以为您提供帮助 这是扩展功能的Kotlin代码段

inline val @receiver:ColorInt Int.darken
    @ColorInt
    get() = ColorUtils.blendARGB(this, Color.BLACK, 0.2f)

方法ColorUtils.blendARGB将您的颜色作为您要混合的第二个颜色,在这种情况下,black最终将最后一个参数作为您的颜色和黑色之间的比率您正在融合。

答案 2 :(得分:11)

如果您想要更简单而不准确,下面的内容可能会对您有所帮助。

public static int returnDarkerColor(int color){
    float ratio = 1.0f - 0.2f;
    int a = (color >> 24) & 0xFF;
    int r = (int) (((color >> 16) & 0xFF) * ratio);
    int g = (int) (((color >> 8) & 0xFF) * ratio);
    int b = (int) ((color & 0xFF) * ratio);

    return (a << 24) | (r << 16) | (g << 8) | b;
}

答案 3 :(得分:10)

使用像RogueBaneling这样的HSV的简单解决方案建议:

<强>科特林

@ColorInt fun darkenColor(@ColorInt color: Int): Int {
    return Color.HSVToColor(FloatArray(3).apply {
        Color.colorToHSV(color, this)
        this[2] *= 0.8f
    })
}

<强>爪哇

@ColorInt int darkenColor(@ColorInt int color) {
    float[] hsv = new float[3];
    Color.colorToHSV(color, hsv);
    hsv[2] *= 0.8f;
    return Color.HSVToColor(hsv);
}

不需要复杂的按位操作或Math。如果需要,将0.8f移动到参数。

答案 4 :(得分:4)

将颜色转换为HSV array,然后将亮度降低20%,然后使用HSVToColor将HSV阵列转换回RGB。注意:您希望在数组中更改的值为V - 值。 (即hsv[2]

答案 5 :(得分:0)

这样,您可以选择颜色的百分比,从而获取较深或较浅的阴影

`    int color = ((ColorDrawable)c2.getBackground()).getColor();
            int  colorLighter=-color*40/100+color;
            int  colorDarker=+color*40/100+color;    `

colorlighter从按钮的背景为我们提供了较浅的颜色阴影 colordarker为我们提供了按钮背景的深色阴影

答案 6 :(得分:0)

最好的方法是使用 ColorUtils.blendARGB

深色:

val newColor = ColorUtils.blendARGB(this, Color.BLACK, 0.5f)

更轻:

val newColor = ColorUtils.blendARGB(this, Color.WHITE, 0.5f)