web-dev-qa-db-ja.com

特定の色を暗くする方法(int)

特定の色を取る関数があり、色を暗くしたい(明るさを20%程度下げる)。色(int)のみを指定してこれを行う方法を理解できません。適切なアプローチは何ですか?

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

もっと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をお試しください。

52
Gary McGowan

これまでに説明されていない簡単な解決策もあります。AndroidにはColorUtilsというクラスがあります。これは、拡張関数のKotlinスニペットです。

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

メソッドColorUtils.blendARGBは、ブレンドする最初のパラメーターと2番目のパラメーターとして色を使用します。この場合はblackで、最後に、最後のパラメーターは、ブレンドするカラーと黒色の比率です。

28
Leosan

RogueBanelingのようなHSVを使用したより簡単なソリューションは、次のことを提案しています。

Kotlin

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

Java

@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必要に応じて引数に。

16
Nohus

より単純で正確ではない場合は、以下を参考にしてください。

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;
}
11
Wayne Jo

色を HSV配列 に変換し、明るさを20%削減してから、HSV配列をHSVToColorを使用してRGBに変換します。注:配列で変更しようとしている値は、V- valueです。 (つまり、hsv[2]

4
RogueBaneling

このようにして、色のパーセンテージを選択して、暗い色合いまたは明るい色合いを取得できます。

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

colorlighterはボタンの背景から明るい色合いを提供しますcolordarkerはボタンの背景から暗い色合いを提供します

0
Anamika Singh