2015-09-19 1 views
0

Я ищу способ получить соответствующий цвет (ы) для любого заданного цвета.Библиотека соответствия цветов

Есть ли способ сделать это программно или с помощью библиотеки (в Java/Android)?

Спасибо!

(как в цвете, который хорошо сочетается с указанным цветом, Это хороший пример: colorcombos.com/colors/FF0000)

+0

То, что я обнаружил, что если вы используете шестнадцатеричные: попробуйте сделать FFFFFF - currentColorValue = комплементарный цвет ... Пример с FFFFFF - красный (ff0000) = голубой (00FFFF), который является дополнительным цветом –

+0

Я не знаю, это именно то, что вы ищете. –

+1

Кажется хорошим методом, хотя мое использование «Комплементария» может быть неправильным, поскольку взаимодополняющий, по-видимому, является противоположностью полярности, и я ищу цвета, которые соответствуют независимо от того, являются ли они противоположностями. –

ответ

2

Простой метод для получения наиболее контрастный цвет, будет подпрыгивать каждый 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

+0

. После быстрого исследования второй метод все же кажется более разумным, поскольку серый цвет не имеет дополнительного цвета, поэтому он дополняет любой другой цвет области, поскольку он представляет собой смесь между каждым цвет с дополнением. http://www.ask.com/science/complementary-color-gray-12f5ef6e4d66e69e –

+0

@YassinHH Это зависит от цели «соответствия» цвета. Если данный цвет является цветом переднего плана, и вам нужен соответствующий цвет фона, тогда более подходящий цвет. – Andreas

+0

Все зависит от используемой технологии проектирования. Оставим это на UX Pro :) –

Смежные вопросы