web-dev-qa-db-ja.com

Androidで色が暗いか明るいかを確認します

タイトルごとに、私の質問は次のとおりです。Android=色が明らかに動的であるために)色が明るいか暗いかを分析/決定する方法を提供しますか?

41
iGio90

Androidはこれを提供していません。これを決定するメソッドを実装できます。ここでそれを行う方法:

public boolean isColorDark(int color){
    double darkness = 1-(0.299*Color.red(color) + 0.587*Color.green(color) + 0.114*Color.blue(color))/255;
    if(darkness<0.5){
        return false; // It's a light color
    }else{
        return true; // It's a dark color
    }
}
89
adboco

サポートライブラリv4(またはAndroidX)を使用する場合、ColorUtils.calculateLuminance(color)を使用できます。これは、_0.0_と_1.0_の間の色の輝度をfloatとして返します。

次のようなことができます:

_boolean isDark(int color) {
    return ColorUtils.calculateLuminance(color) < 0.5;
}
_

見る:

Android API 24)メソッドColor.luminance(color)もあるので注意してください。

46
Robyer
public float getLightness(int color) {
    int red   = Color.red(color);
    int green = Color.green(color);
    int blue  = Color.blue(color);

    float hsl[] = new float[3];
    ColorUtils.RGBToHSL(red, green, blue, hsl);
    return hsl[2];
}

ColorUtilsを使用して、色の明るさを簡単に確認できます。

if (getLightness(color) < 0.5f ){
    // This color is too dark!
}
5
Brandon Bahret

別の解決策:

private static final int BRIGHTNESS_THRESHOLD = 130;

/**
 * Calculate whether a color is light or dark, based on a commonly known
 * brightness formula.
 *
 * @see {@literal http://en.wikipedia.org/wiki/HSV_color_space%23Lightness}
 */
public static boolean isColorDark(int color) {
    return ((30 * Color.red(color) +
            59 * Color.green(color) +
            11 * Color.blue(color)) / 100) <= BRIGHTNESS_THRESHOLD;
}
0
Cícero Moura