Как использовать GetPixel () для проверки разных позиций

У меня есть программа, которая должна использовать GetPixel, но в разных позициях, после прочтения одного значения и его оценки, она должна изменить позиции x, y и пересмотреть значения другой функции.
У меня есть текущий код:

while (true) {
HDC hDC;
hDC = GetDC(NULL);
int cx = 793;
int cy = 866;
COLORREF color = GetPixel(hDC, cx, cy); //Use x=793 y=866
ReleaseDC(NULL, hDC);
RGBTRIPLE rgb;
int red = GetRValue(color);
int green = GetGValue(color);
int blue = GetBValue(color);
std::thread t1 (verde, red, green, blue);
t1.join();
std::thread t2(amarelo, red, green, blue);//But then here I would like it to read
//from let's say x=803 y=796
t2.join();
}

Проблема в том, что GetPixel должен использовать X = 793 И Y = 866 для verde функцию, а затем использовать х = 803 у = 796 для amarelo функция

-1

Решение

Простой ответ на ваш вопрос заключается в том, что вы можете позвонить GetPixel() несколько раз с разными координатами.

Также нет необходимости звонить GetDC(0) на каждой итерации цикла. Вы должны вызвать его один раз, прежде чем войти в цикл.

Попробуй это:

COLORREF color;
int red, green, blue;

HDC hDC = GetDC(NULL);
while (some_condition_is_true) { // don't write infinite loops!
color = GetPixel(hDC, 793, 866);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
std::thread t1(verde, red, green, blue);
t1.join();

color = GetPixel(hDC, 803, 796);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
std::thread t2(amarelo, red, green, blue);
t2.join();
}
ReleaseDC(NULL, hDC);

Однако, как говорится, ваши темы тратятся впустую. Ваш цикл блокируется в ожидании завершения первого потока перед запуском второго потока и блокируется в ожидании завершения второго потока перед переходом к следующей итерации цикла. Вы выполняете свой код в последовательном порядке, отказываясь от цели использования потоков, так что вы можете просто удалить потоки и вызвать функции напрямую:

COLORREF color;
int red, green, blue;

HDC hDC = GetDC(NULL);
while (some_condition_is_true) {
color = GetPixel(hDC, 793, 866);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
verde(red, green, blue);

color = GetPixel(hDC, 803, 796);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
amarelo(red, green, blue);
}
ReleaseDC(NULL, hDC);

Если вы хотите использовать потоки для параллельной обработки нескольких пикселей, это должно выглядеть примерно так:

COLORREF color;
int red, green, blue;

HDC hDC = GetDC(NULL);
while (some_condition_is_true) {
color = GetPixel(hDC, 793, 866);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
std::thread t1(verde, red, green, blue);

color = GetPixel(hDC, 803, 796);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
std::thread t2(amarelo, red, green, blue);

t1.join();
t2.join();
}
ReleaseDC(NULL, hDC);

Или даже так:

void verde(HDC hDC, int x, int y)
{
COLORREF color;
int red, green, blue;

while (some_condition_is_true) {
color = GetPixel(hDC, x, y);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
//...
}
}

void amarelo(HDC hDC, int x, int, y)
{
COLORREF color;
int red, green, blue;

while (some_condition_is_true) {
color = GetPixel(hDC, x, y);
red = GetRValue(color);
green = GetGValue(color);
blue = GetBValue(color);
//...
}
}

HDC hDC = GetDC(NULL);

std::thread t1(verde, hDC, 793, 866);
std::thread t2(amarelo, hDC, 803, 796);

t1.join();
t2.join();

ReleaseDC(NULL, hDC);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]