Что нового

как реализовать функцию проверки вхождения цвета в заданный диапазон цвета

Baner

Новичок
Сообщения
12
Репутация
0
хотел написать функцию для проверки вхождения определенного цвета в диапазон схожих цветов - да вот не выходит что то каменный цветок))) может ктонибудь подскажет какими путями это можно сделать.
Заранее СПАСИБО!!!
С уважением БАНЕР )))
 

DeLeTeSHift

Знающий
Сообщения
46
Репутация
9
Код:
#include <color.au3>

$d = 0x10                                                      ; допустимая ошибка
$iYellow =  0xF3D64A                                           ; проверяемый цвет(это жёлтый)
$iColor = _ColorGetRGB($iYellow)                               ; получаем массив RGB цвета
If $iColor[0] < 0x50 + $d And $iColor[1] > 0x90 - $d And $iColor[2] < 0x50 + $d Then ; <==это зелёный
	MsgBox(64, "", "Цвет входит в диапазон")
Else
	MsgBox(48, "", "Цвет не входит в диапазон")
EndIf
 
Автор
B

Baner

Новичок
Сообщения
12
Репутация
0
Большое спасибо!!!
Не знал про эту библиотеку. Это единственный способ ? или есть и другой ? Скажем математический метод ? Например значение цвета конвертируется в цифру 32 бита а потом просто задается диапазон сравнения и сравнивается уже не цвет а цифра ? или скажем компонентное сравнение РЖБ по составляющим каждого цвета. Очень интересно как еще можно это реализовать)))) Потому как ведь может сравниваться смешанная часть цветов - скажем переход от красного к желтому - или например еще и яркость надо сравнить как тогда _ColorSetRGB ? ( и возможно ли тут оценивать цвет в пространстве XYZ?- т.е. еще и яркость) В моем случае самое простое решение это перевод цвета в десятичное число а дальше сравнение по числовому принципу.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Baner
Почему вы думаете что диапазон цветов во всех случаях будет какая то неразрывная последовательность значений? В большинстве случаев как раз наоборот. Вы можете шестнадцатеричные числа преобразовать/представить в десятичный вид. Это просто способ представления числа, в любом варианте это одно и тоже число.

скажем переход от красного к желтому - или например еще и яркость надо сравнить как тогда _ColorSetRGB ?
тогда надо определиться более точно. Задача не решаема если нет точной постановки что требуется.
 
Автор
B

Baner

Новичок
Сообщения
12
Репутация
0
В моем случае самое простое решение это перевод цвета в десятичное число (да можно и в HEX) а дальше сравнение по числовому принципу. (или невозможно представить цветовую модель системой чисел по непрерывной шкале цифр?? 32000000=Белый а 0=черный - это как пример конечно).
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
http://autoit-script.ru/index.php/topic,14005.0/topicseen.html
 
Автор
B

Baner

Новичок
Сообщения
12
Репутация
0
ага вот немного проясняется!!!! тогда как мне контролировать наличие отдельной компоненты цвета в заданом диаппазоне?? ну к примеру красного? Это надо запись раскладывать на компонентные составляющие отдельно -красный -зеленый -синий? а потом сравнивать в числовом значении только скажем одну компоненту - скажем красную от 00 до FF. Тогда как это реализовать???
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Baner [?]
(или невозможно представить цветовую модель системой чисел по непрерывной шкале цифр?? 32000000=Белый а 0=черный - это как пример конечно).
Не то что невозможно, оно именно так и представляется. Смотрите тему Random Color
Код:
Random(0, 0xFFFFFF, 1)
Здесь так и написано 000000 это чёрный, он же просто 0, а 0xFFFFFF это белый. Переведи в десятичный, суть не измениться. Проблема что выбор диапазона не является отдельно взятый участок последовательности. Если брать иную цветовое пространство, то всё равно придётся преобразовывать данные в это пространство, потому что функции возвращают цвет в формате RGB, соответственно быстрее будет указать диапазон трёх составляющих для этого цветового представления цвета, чем конвертировать по сложной формуле для того чтобы сравнить.
Ещё вариант
 
Автор
B

Baner

Новичок
Сообщения
12
Репутация
0
Большое СПАСИБО!!! наверное проще написать функцию где заданы края по каждой компоненте цвета R=>25 G=>150 and G=<200 B=<50 это упрощено конечно но наверное этот путь самый оптимальный для меня-точнее КАК реализовать Функцию вывода значений по каждому цвету вывод в 3 переменные
Код:
#include <color.au3>
$color_x=PixelGetColor( x, y)
$RGB=_ColorGetRGB($color_x)
$R_color=$RGB[0]
$G_color=$RGB[1]
$B_color=$RGB[2]

примерно так???
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Baner

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Верх