Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

сравнение двух близких цветов   Найти похожие ветки 

 
NickKuz ©   (2005-02-18 00:43) [0]

Например у нас есть два TColorDialog которые выдают два произвольных (не только стандартных забитых в константы) цвета.
Например Color1 и Color2.

Задача: выяснить являются ли эти цвета одинаковые даже по оттенку.

Пример:
красный и светло красный-одинаковые цвета.
красный и черный естественно разные.

Я придумал такой алгоритм:
Оба цвета преобразовываются к стандартным цветам(я полагаю они будут преобразованы к наиболее близкому) т.е. в примере красный и светло красный по идее должны преобразоваться оба в clRed
Дальше происходит сравнение и выводится результат.

Проблема только в том что я не знаю какая функция отвечает в Delphi за преобразование любого цвета к стандартному.

Вот это мне и хочется познать.

Второй вариант это если ктонибудь предложит любой другой алгоритм решить эту проблему.

заранее спасибо за уделенное время хотябы прочтения а еще лучше помощи по этому вопросу.


 
Ji ©   (2005-02-18 01:25) [1]

Я не знаю как привести цвет к виду RRGGBB. Но если это можно сделать, то дальше чистой воды аналитика. Ты можешь определить оттенком какого из основных цветов является твой цвет. Если больше красного, то значит это оттенок красного и т.д. Например если цвет 4188AF, то однозначно синий. Можно еще и промежуточные варианты предусмотреть, а также близкие к черному и белому.


 
Просто Джо ©   (2005-02-18 02:08) [2]

GetRValue и по аналогии


 
MBo ©   (2005-02-18 06:38) [3]

Для разных целей существует множество цветовых систем. Почитай о них, выбери подходящую, переводи в нее свои цвета и сравнивай. возможно, это будет HSV, Lab или еще какая-то.


 
AlexandrKu   (2005-02-18 09:07) [4]

Обратное преобразование я делал таким образом
Color=(R+G*256+B*65536)
т.е. как перевод из одной системы в другую
B=trunc(color/65536);
G=trunc((color-(b*65536))/256)
R=trunc((color-(b*65536)-(g*256))
вроде так получается


 
Джинн   (2005-02-18 09:51) [5]

2 AlexandrKu

Вообще-то, в [2] было дано очень даже правильное решение.
Так что не стоит так изголяться...
В дополнение:
function GetRValue(Color: TColor): byte;
function GetGValue(Color: TColor): byte;
function GetBValue(Color: TColor): byte;
function RGB(R, G, B: byte): TColor;


 
AlexandrKu   (2005-02-18 09:53) [6]

в том языке для которого я это писал нет этой функции


 
AlexandrKu   (2005-02-18 09:59) [7]

2 Джинн
Но суть этих функций такая-же как я и описал


 
REA   (2005-02-18 10:21) [8]

Мои домыслы:
Надо их группировать по какому-либо признаку. В системе HLS (RGBToHLS()) имеет смысл группировать по цветовому тону Hue. Если цвета попадают в заданный диапазон Hue (Например 1..10, 11..20), можно считать их одинаковыми. Хотя визуально от  насыщенности и светлоты тоже много зависит и возможно нужен более сложный алгоритм, учитывающий группировку по 3 признакам.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
6-1104411289
Sveta_cc
2004-12-30 15:54
2005.03.06
Server Socket ClientSocket


3-1107787186
Anunimus
2005-02-07 17:39
2005.03.06
Interbase параметры по умолчанию


1-1108898873
шаман
2005-02-20 14:27
2005.03.06
Доступ к символам строки по индексу


4-1106048588
atom
2005-01-18 14:43
2005.03.06
расшарить диск С: на локальной машине


14-1108389364
Cosinus
2005-02-14 16:56
2005.03.06
Иконки для контактов(изображение телефонов, моб. тел, домов, )...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский