Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сравнение цвета

21K
18 января 2007 года
Grinja
11 / / 18.01.2007
Всем привет.

Решил написать для себя программу которая считывает данные с экрана (с координат X и Y) и сравнивает их.

Сравнение не точное. Работать должно как будто это сравнивает человеческий глаз.

При считывание получаю данные цвета as long.

Посоветуйте в каким способ лучше сравнивать цвета.
13K
18 января 2007 года
IpatovSoft
62 / / 11.01.2007
А по каким критериям ты хочешь сравнивать? И какая цель, если её знать будет легче.
13K
18 января 2007 года
IpatovSoft
62 / / 11.01.2007
Где ярче, а где темней можно определить так. Берём считываем цвет в двух точках А и В. Цвет точки А=RGB(R1,G1,B1), B=RGB(R2,G2,B2).
RGB(255,255,255) Белый цвет
RGB(0,0,0)Чёрный цвет
Чем ближе цвет к 255 тем от светлее. Так вот
If R1+G1+B1<R2+G2+B2 then print "Вточке А цвет темней чем в точке В"
11K
18 января 2007 года
.nornad
125 / / 04.01.2007
Цитата: IpatovSoft
If R1+G1+B1<R2+G2+B2 then print "Вточке А цвет темней чем в точке В"



Ну, это не очень хороший вариант.
Я бы сделал что-то вроде такого (пример на с++, но смысл понять нетрудно):

 
Код:
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 { не похожи }


Оптимизации никакой - тут важен только смысл. Получить цвета из long нетрудно - три младших байта (по байту на цвет). 3 мною выбрана "на глаз" и можно поэкспериментировать. Кстати, думаю, правильнее будет даже так:

 
Код:
if (5 > (deltaR + deltaG + deltaB) ) { цвета похожи }
 else { не похожи }
21K
21 января 2007 года
Grinja
11 / / 18.01.2007
Сорру за непонятно описаную задачу.

Цель такая.
Итёт сканирование экрана, при этом заданы верхний и нижний предел цвета (дапустим от светло зелёного до тёмно зелёного).
Задача проверить, что просканированный цвет находиться в промежутке между задаными цветами.

Решение с дельтой нужно обдумать а вот решение с суммой дельт не проходит, так как возможна уменьшение разницы засчёт другово оттенка (тоесть совсем другово цвета).

Дапустим
Нижний предел = 2027802 [as long] or RGB(30,241,26)
Верхний придел = 2717000 [as long] or RGB(41,117,72)
--------------------------------------------------------
Результат скана = 3241545 [as long] or RGB(49,118,73)

Визуально цвет вродебы подходит.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог