Форум программистов, компьютерный форум CyberForum.ru

Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов - C++

Восстановить пароль Регистрация
 
Nalik
 Аватар для Nalik
44 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 582
11.05.2014, 05:26     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов #1
Есть программа, которая смотрит в координаты и сверяет цвет пикселя в этих координатах с диапазон цветов указанных в коде и если цвет пикселя в указанных координатах попадает в диапазон цветов, то об этом выводится сообщение.

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void test (HWND Handle) 
{
    COLORREF minLimit = RGB(110,11,11); //диапазон минимального цвета
    COLORREF maxLimit = RGB(189,163,177); //диапазон максимального цвета
 
    HDC hdc=GetDC(Handle);
    COLORREF  d = GetPixel (hdc, 7-3, 58-25); // координаты определения пикселя
    if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit))
    {
        if(GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit))
        {
             if(GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit))
             {
                   cout <<"ЕДРЁНА ВОЖЬ!!!!  ПИКСЕЛЬ В НУЖНОМ ДИАПАЗОНЕ! КРУТО! :-)))))))))))))\n";
                   Sleep(1000);
                    //НАВЕРНОЕ ТУТ МНЕ НАДО ЧТО - ТО СДЕЛАТЬ...
             }
        }
    }
Сейчас появилась необходимость обрабатывать действия, если цвет пикселя не попал в диапазон цветов, но не знаю как это сделать правильно. Делаю так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void test (HWND Handle) 
{
    COLORREF minLimit = RGB(110,11,11); //диапазон минимального цвета
    COLORREF maxLimit = RGB(189,163,177); //диапазон максимального цвета
 
    HDC hdc=GetDC(Handle);
    COLORREF  d = GetPixel (hdc, 7-3, 58-25); // координаты определения пикселя
    if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit))
    {
        if(GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit))
        {
             if(GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit))
             {
                   cout <<"ЕДРЁНА ВОЖЬ!!!!  ПИКСЕЛЬ В НУЖНОМ ДИАПАЗОНЕ! КРУТО! :-)))))))))))))\n";
                   Sleep(1000);
                    //НАВЕРНОЕ ТУТ МНЕ НАДО ЧТО - ТО СДЕЛАТЬ...
             }
        }
    }
    else
    {
        cout <<"пиксель не в диапазоне\n";
    }
}
в этом случае сценарий сразу переходит на else, после выполнения
C++
1
 if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit))
т.е. получается RGB цвет проверяется не полностью, а только по "R"данным. Как сделать проверку и учесть все параметры RGB цвета?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 05:26     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов
Посмотрите здесь:

C++ Работа с экраном в текстовом режиме (вывод всех цветов фона, разделяя цвета паузой)
Как проверить диапазон значений? C++
C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным? C++
C++ Производится одиночный выстрел по мишени в виде круга. Вывести сообщение: «попал» или «не попал»
C++ Записать в массив RGB-цвета bmp-файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
11.05.2014, 05:51     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов #2
Цитата Сообщение от Nalik Посмотреть сообщение
в этом случае сценарий сразу переходит на else, после выполнения
зачем все проверять? если хотя бы 1 не подходит в данном случае красный, то уже не в диапазоне выходит

попробуйте задать
C++
1
2
COLORREF minLimit = RGB(0,11,11); //диапазон минимального цвета
COLORREF maxLimit = RGB(255,163,177); //диапазон максимального цвета
красный должно пройти
newbie666
Заблокирован
11.05.2014, 05:51     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов #3
Ещё один плодильщик дубликатов....
Цитата Сообщение от Nalik Посмотреть сообщение
cout <<"ЕДРЁНА ВОЖЬ!!!! *ПИКСЕЛЬ В НУЖНОМ ДИАПАЗОНЕ! КРУТО! :-)))))))))))))\n";
* * * * * * * * * *Sleep(1000);
* * * * * * * * * * //НАВЕРНОЕ ТУТ МНЕ НАДО ЧТО - ТО СДЕЛАТЬ...
* * * * * * *}
))) Ты даже не подставил вместо моего коммента из другой ветки свой код )))))))))
куда, почему и зачем переходит выяснить очень просто - ставишь брейкпоинт на строку номер 8 и перед проверкой условия наводишь мышкой на переменные и смотришь их значения ёлки палки, учись пользоваться отладчиком
Nalik
 Аватар для Nalik
44 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 582
11.05.2014, 06:17  [ТС]     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов #4
Цитата Сообщение от newbie666 Посмотреть сообщение
))) Ты даже не подставил вместо моего коммента из другой ветки свой код )))))))))
куда, почему и зачем переходит выяснить очень просто - ставишь брейкпоинт на строку номер 8 и перед проверкой условия наводишь мышкой на переменные и смотришь их значения ёлки палки, учись пользоваться отладчиком
честно говоря я тем самым рассчитывал привлечь именно твоё внимание, полагая что ты должен знать ответ на мой вопрос, так как именно ты подсказал мне эту реализацию)
куда и зачем я и так знаю, я же написал, что после кода
C++
1
if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit))
сценарий сразу переходит на else, из за этого возникают неточности в программе)

Цитата Сообщение от TrueBit Посмотреть сообщение
зачем все проверять? если хотя бы 1 не подходит в данном случае красный, то уже не в диапазоне выходит
дело в том, что если пиксель в координатах будет к примеру 116,0,0, то действия по ветке else уже не пойдут, так как параметр R (116) входит в диапазон.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
11.05.2014, 06:31     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов #5
Цитата Сообщение от Nalik Посмотреть сообщение
если пиксель в координатах будет к примеру 116,0,0, то действия по ветке else уже не пойдут
так хотите?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void test (HWND Handle) 
{
    COLORREF minLimit = RGB(110,11,11); //диапазон минимального цвета
    COLORREF maxLimit = RGB(189,163,177); //диапазон максимального цвета
 
    HDC hdc=GetDC(Handle);
    COLORREF  d = GetPixel (hdc, 7-3, 58-25); // координаты определения пикселя
    if( GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit) &&
        GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit) &&
        GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit) )
    {
            cout <<"ЕДРЁНА ВОЖЬ!!!!  ПИКСЕЛЬ В НУЖНОМ ДИАПАЗОНЕ! КРУТО! :-)))))))))))))\n";
            Sleep(1000);
            //НАВЕРНОЕ ТУТ МНЕ НАДО ЧТО - ТО СДЕЛАТЬ...
    } else {
            cout <<"пиксель не в диапазоне\n";
    }
}
Yandex
Объявления
11.05.2014, 06:31     Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов
Ответ Создать тему
Опции темы

Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru