2014-06-17 11 views

risposta

60

Android non lo fornisce, è possibile implementare un metodo per determinarlo. Ecco un metodo per farlo:

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 
    } 
} 
+0

Grazie! goona prova al più presto e riferiscilo! – iGio90

+0

il metodo sta funzionando bene! grazie molto! – iGio90

+4

da dove hai preso questi numeri magici ?? (0,299, 0,587, 0,114)? –

4
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]; 
} 

Si potrebbe facilmente utilizzare i ColorUtils per controllare la leggerezza di un colore.

if (getLightness(color) < 0.5f){ 
    // This color is too dark! 
} 
+0

verde e giallo sono entrambi leggeri per questo ... –

0

Un'altra soluzione:

int finale private static 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; 
} 
2

Se si utilizza il supporto biblioteca v4, è possibile utilizzare ColorUtils.calculateLuminance(color), che restituisce luminosità del colore come float tra 0.0 e 1.0.

Così si può fare qualcosa di simile:

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

See: https://developer.android.com/reference/android/support/v4/graphics/ColorUtils.html#calculateLuminance(int)

Nota dal API Android 24 c'è anche il metodo: Color.luminance(color).