Простой метод для получения наиболее контрастный цвет, будет подпрыгивать каждый RGB цвет, насколько это возможно. Под этим я подразумеваю, что значение 00-7F становится FF, а значение 80-FF становится 00. Результат всегда будет насыщенным.
Если вы хотите, чтобы дополнительный цвет оставался в соответствии с исходным цветом, например, пастельный красный цвет становится пастельным голубым, все становится более сложным, но все зависит от используемой вами цветовой модели, например. RGB против HSV против других.
Вы можете использовать формулу 0xFF - value
для каждого цвета RGB, но серый цвет останется серым, так что это не всегда хорошо.
А как работать с цветовыми значениями RGB, вот как найти наиболее контрастный цвет цвета заданного в качестве шестнадцатеричной строки.
String color = "2E8B57" // SeaGreen
int r1 = Integer.parseInt(color.substring(0, 2), 16);
int g1 = Integer.parseInt(color.substring(2, 2), 16);
int b1 = Integer.parseInt(color.substring(4, 2), 16);
int r2 = (r1 < 0x80 ? 0xFF : 0x00);
int g2 = (g1 < 0x80 ? 0xFF : 0x00);
int b2 = (b1 < 0x80 ? 0xFF : 0x00);
String newColor = String.format("%02x%02x%02x", r2, g2, b2);
// newColor = "FF00FF" (Fuchsia)
Используя другой путь, вы будете использовать: имена
int r2 = 0xFF - r1;
int g2 = 0xFF - g1;
int b2 = 0xFF - b1;
String newColor = String.format("%02x%02x%02x", r2, g2, b2);
// newColor = "D174A8" (Hopbush)
цвета взяты из www.htmlcsscolor.com
: SeaGreen, Fuchsia, Hopbush
То, что я обнаружил, что если вы используете шестнадцатеричные: попробуйте сделать FFFFFF - currentColorValue = комплементарный цвет ... Пример с FFFFFF - красный (ff0000) = голубой (00FFFF), который является дополнительным цветом –
Я не знаю, это именно то, что вы ищете. –
Кажется хорошим методом, хотя мое использование «Комплементария» может быть неправильным, поскольку взаимодополняющий, по-видимому, является противоположностью полярности, и я ищу цвета, которые соответствуют независимо от того, являются ли они противоположностями. –