Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nalik
46 / 32 / 10
Регистрация: 30.11.2012
Сообщений: 677
#1

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

11.05.2014, 05:26. Просмотров 437. Ответов 4
Метки нет (Все метки)

Есть программа, которая смотрит в координаты и сверяет цвет пикселя в этих координатах с диапазон цветов указанных в коде и если цвет пикселя в указанных координатах попадает в диапазон цветов, то об этом выводится сообщение.

Код:
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 цвета?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 05:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверить, попал ли пиксель RGB-цвета в диапазон нужных цветов (C++):

RGB диапазон для коричневого цвета - C++
Ребят привет! Не знаю в правильный ли раздел пишу, если что перенесите тему туда куда нужно. В общем задался вопросом цвета, надо на...

Как выделить определенный диапазон цвета RGB на картинке bmp? - C++
всем доброго времени суток!помогите,пожалуйста, в написании кода.есть картинка bmp. Надо разложить ее на цвета rgb. определить диапазон...

C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным? - C++
Всем привет, я сам C++ не знаю вообще мне крайне сложно разобраться в чужом коде, очень надеюсь на помощь! Насколько я понял, в этом...

Производится одиночный выстрел по мишени в виде круга. Вывести сообщение: «попал» или «не попал» - C++
Всем здраствуйте, нам по Основам программирования задали вот такую задачку: Задача 1 – 3 балла Производится одиночный выстрел по мишени...

Вывод цвета RGB на Светодиод - C++
В общем есть такая задача интереная,есть около 50 светодиодов , нужно по цвету ргб выводить нужный цвет на него.Что можно почитать по этому...

Записать в массив RGB-цвета bmp-файла - C++
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int main() { unsigned char x; ifstream...

4
TrueBit
96 / 96 / 12
Регистрация: 19.11.2012
Сообщений: 195
11.05.2014, 05:51 #2
Цитата Сообщение от Nalik Посмотреть сообщение
в этом случае сценарий сразу переходит на else, после выполнения
зачем все проверять? если хотя бы 1 не подходит в данном случае красный, то уже не в диапазоне выходит

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

Цитата Сообщение от TrueBit Посмотреть сообщение
зачем все проверять? если хотя бы 1 не подходит в данном случае красный, то уже не в диапазоне выходит
дело в том, что если пиксель в координатах будет к примеру 116,0,0, то действия по ветке else уже не пойдут, так как параметр R (116) входит в диапазон.
0
TrueBit
96 / 96 / 12
Регистрация: 19.11.2012
Сообщений: 195
11.05.2014, 06:31 #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";
    }
}
0
11.05.2014, 06:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2014, 06:31
Привет! Вот еще темы с ответами:

Реализовать конвертер оттенка цвета из формата RGB (кодированный тремя байтами) в формат HTML - C++
Любой цвет можно определить компонентами r, g, b - красный, зеленый, синий. В зависимости от того, сколько байтов выделено на каждую...

Работа с экраном в текстовом режиме (вывод всех цветов фона, разделяя цвета паузой) - C++
Пожалуйста подскажите, как сделать вывод всех цветов фона, разделяя цвета паузой. Задание: Дополнить меню функциональной клавишей F6:...

Создать гистограмму цветов из цветов загруженного изображения и искать с помощью нее пиксели одинакового цвета - C#
Необходимо создать гистограмму цветов из цветов загруженного изображения и искать с помощью нее пиксели одинакового цвета. Нужно переделать...

Использование RGB цветов в Canvas - C++ Builder
Не могу понять как использовать цвета RGB при их использовании в Canvas. Например, при контроле R (красного), все впорядке. 0 = черный,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru