int deltaR = color1.Red - color2.Red;
int deltaG = color1.Green - color2.Green;
int deltaB = color1.Blue - color2.Blue;
if ( 3 > deltaR ) { цвета похожи }
else { не похожи }
if ( 3 > deltaG ) { цвета похожи }
else { не похожи }
if ( 3 > deltaB ) { цвета похожи }
else { не похожи }
Сравнение цвета
Решил написать для себя программу которая считывает данные с экрана (с координат X и Y) и сравнивает их.
Сравнение не точное. Работать должно как будто это сравнивает человеческий глаз.
При считывание получаю данные цвета as long.
Посоветуйте в каким способ лучше сравнивать цвета.
А по каким критериям ты хочешь сравнивать? И какая цель, если её знать будет легче.
RGB(255,255,255) Белый цвет
RGB(0,0,0)Чёрный цвет
Чем ближе цвет к 255 тем от светлее. Так вот
If R1+G1+B1<R2+G2+B2 then print "Вточке А цвет темней чем в точке В"
Цитата: IpatovSoft
If R1+G1+B1<R2+G2+B2 then print "Вточке А цвет темней чем в точке В"
Ну, это не очень хороший вариант.
Я бы сделал что-то вроде такого (пример на с++, но смысл понять нетрудно):
Код:
Оптимизации никакой - тут важен только смысл. Получить цвета из long нетрудно - три младших байта (по байту на цвет). 3 мною выбрана "на глаз" и можно поэкспериментировать. Кстати, думаю, правильнее будет даже так:
Код:
if (5 > (deltaR + deltaG + deltaB) ) { цвета похожи }
else { не похожи }
else { не похожи }
Цель такая.
Итёт сканирование экрана, при этом заданы верхний и нижний предел цвета (дапустим от светло зелёного до тёмно зелёного).
Задача проверить, что просканированный цвет находиться в промежутке между задаными цветами.
Решение с дельтой нужно обдумать а вот решение с суммой дельт не проходит, так как возможна уменьшение разницы засчёт другово оттенка (тоесть совсем другово цвета).
Дапустим
Нижний предел = 2027802 [as long] or RGB(30,241,26)
Верхний придел = 2717000 [as long] or RGB(41,117,72)
--------------------------------------------------------
Результат скана = 3241545 [as long] or RGB(49,118,73)
Визуально цвет вродебы подходит.