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

GetPixel Сканирование область пикселей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Листание текста на экране http://www.cyberforum.ru/cpp-beginners/thread428795.html
На экран выводится файл, который можно листать вперед или назад. По выведенному на экран тексту можно перемещать курсор, который при подводе к символу выделяет его цветом.
C++ Работа со строками, алгоритм есть. Задача сводится к тому, что необходимо проверить вхождение в строку определенного набора символов (далее "маска"). Алгоритм реализации прост как моя жизнь, но не хватает знаний. Знатоки С\С++ помогите! Алгоритм заключаться в том, чтобы проверять по символьно, т.е. берем 1 символ маски, ищем его в строке, после нахождения берем второй и сравниваем со следующим символом строки, и т.д. пока маска... http://www.cyberforum.ru/cpp-beginners/thread428787.html
C++ Немогу понять в чем ошибка (
#include <iostream> #include <math.h> #include <conio.h> using namespace std; int main() { float x, f1, f2, f3;
C++ Вычислить сумму членов бесконечного ряда с заданной степенью точности > 0 и заданного значения х
с Latex не стал мучится - приложил изображением.
C++ значение функции http://www.cyberforum.ru/cpp-beginners/thread428764.html
не получается задача
C++ Моя программа на других компьютерах Почему когда я напишу какую нибудь программу на с++(проект win 32, не консольное) у меня всё запускается всё отлично, но если я скину данный файл ***.ехе например другу(тоесть другой комп), то у него при запуске кмпоьютер ругается на мой файл ехе, в чём причина?и как сделать, что бы у всех запускался данный файл, а не только у меня? подробнее

Показать сообщение отдельно
Ganibal95
1 / 1 / 0
Регистрация: 15.01.2012
Сообщений: 23
15.01.2012, 21:31  [ТС]     GetPixel Сканирование область пикселей
А можите это в функцию приведенную выше засунуть? А то я не совсем пойму откуда переменные bp и.т.д...

Добавлено через 7 минут
zss2, по идее мне нужно чтоб эта функция выполняла, так-же как в autoIt
Вот описание этой функции в AutoIt
Найти пиксел заданного цвета в указанном прямоугольнике

PixelSearch ( left, top, right, bottom, color, shade, step)

Параметры

left левая координата прямоугольника.
top верхняя координата прямоугольника.
right правая координата прямоугольника.
bottom верхняя координата прямоугольника.
color десятичное значение цвета.
shade-variation [опциональный] величина от 0 до 255 указывает разрешенное число каналов сопоставимого цвета для rgb компонентов. Стандартное значение 0 (точное сопоставление).
step [опциональный] шаг поиска (в пикселах). Значение 2 означает проверку каждого второго пиксела. Стандартное значение 1.

Добавлено через 2 минуты
---------
И еше нужно чтоб функция сканировала с начало экрана, а не сначало окна...

Добавлено через 17 минут
--------
Уже сделал вот так:
Код
DWORD PixelSearth(int x, int y, int ix, int iy, COLORREF Color, int shade)
{
	COLORREF Pixl;
	HDC d3ddc2;
	HWND d3dhwnd2;
	d3dhwnd2 = GetForegroundWindow();
	d3ddc2 = GetDC(d3dhwnd2);
	BYTE r=GetRValue(Color); 
	BYTE g=GetGValue(Color); 
	BYTE b=GetBValue(Color);
	int ux = ix - x;
	int uy = iy - y;
	for(int i=0;i<=uy;i++)
	{
		for(int j=0;j<=ux;j++)
		{
			Pixl=GetPixel(d3ddc2, x+i, y+j);
			BYTE rp=GetRValue(Pixl); 
			BYTE gp=GetGValue(Pixl); 
			BYTE bp=GetBValue(Pixl);
			if(abs(b-bp)<=shade && abs(r-rp)<=shade && abs(g-gp)<=shade) return (1);
		}
	}
return (0);
}
Думаю что сканирования окна/экрана задается тут:
Код
d3dhwnd2 = GetForegroundWindow();
d3ddc2 = GetDC(d3dhwnd2);
Мне нужно именно экрана

Добавлено через 3 минуты
-----------------------
нашол ошибку, исправил:
Код
DWORD PixelSearth(int x, int y, int ix, int iy, COLORREF Color, int shade)
{
	COLORREF Pixl;
	HDC d3ddc2;
	HWND d3dhwnd2;
	d3dhwnd2 = GetForegroundWindow();
	d3ddc2 = GetDC(d3dhwnd2);
	BYTE r=GetRValue(Color); 
	BYTE g=GetGValue(Color); 
	BYTE b=GetBValue(Color);
	int ux = ix - x;
	int uy = iy - y;
	for(int i=0;i<=uy;i++)
	{
		for(int j=0;j<=ux;j++)
		{
			Pixl=GetPixel(d3ddc2, x+j, y+i);
			BYTE rp=GetRValue(Pixl); 
			BYTE gp=GetGValue(Pixl); 
			BYTE bp=GetBValue(Pixl);
			if(abs(b-bp)<=shade && abs(r-rp)<=shade && abs(g-gp)<=shade) return (1);
		}
	}
return (0);
}
Теперь осталось сделать область сканирования ВСЕГО экрана.

Добавлено через 18 минут
---------
Добавил Step:
Код
DWORD PixelSearth(int x, int y, int ix, int iy, COLORREF Color, int shade, int Step)
{
	COLORREF Pixl;
	HDC d3ddc2;
	HWND d3dhwnd2;
	d3dhwnd2 = GetForegroundWindow();
	d3ddc2 = GetDC(d3dhwnd2);
	BYTE r=GetRValue(Color);
	BYTE g=GetGValue(Color);
	BYTE b=GetBValue(Color);
	int ux = ix - x;
	int uy = iy - y;
	for(int i=0;i<=uy;i++)
	{
		for(int j=0;j<=ux;j+=Step)
		{
			Pixl=GetPixel(d3ddc2, x+j, y+i);
			BYTE rp=GetRValue(Pixl); 
			BYTE gp=GetGValue(Pixl); 
			BYTE bp=GetBValue(Pixl);
			if(abs(b-bp)<=shade && abs(r-rp)<=shade && abs(g-gp)<=shade) return (1);
		}
	}
return (0);
}
Теперь ост. только сканирование всего экрана! Помогите
 
Текущее время: 08:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru