タイトルごとに、私の質問は次のとおりです。Android=色が明らかに動的であるために)色が明るいか暗いかを分析/決定する方法を提供しますか?
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
}
}
サポートライブラリ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)
もあるので注意してください。
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!
}
別の解決策:
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;
}