PDA

Просмотр полной версии : [Помогите!] Определение % заданного цвета на экране


=PaLeTiZaToR=
29.03.2012, 17:08
Задался вопросом , а можно ли сделать программу , которая будет мониторить определенный участок экрана , и в зависимости от того есть ли там нужный цвет или нет , нажимать кнопку (сразу говорю что таких участка должно быть 4).
Немного раскроюсь , говорю о создании чита на Guitar Hero

VeTaL_UA
29.03.2012, 17:25
Можно.

Skrillex3
29.03.2012, 17:30
посмотри урок Антона Макрушина про капча-расшифровщика там как раз есть про определение цветов

Nickitee
29.03.2012, 17:45
Да что тут думать,можно делать через цикл: получаем всего количество точек на определённом участке, это будет 100%, потом получаем определённые цвета на участке, высчитываем их из 100%, потом проверяем если на участке какого то цвета 50%+ - то жмём что-то там, и так для каждого цвета.
Тут вопрос в другом, тебе нужна функция которая очень быстро считывает пиксели в заданном участке, чтобы твой бот реагировал более-менее быстрее.

=PaLeTiZaToR=
30.03.2012, 01:28
Да что тут думать,можно делать через цикл: получаем всего количество точек на определённом участке, это будет 100%, потом получаем определённые цвета на участке, высчитываем их из 100%, потом проверяем если на участке какого то цвета 50%+ - то жмём что-то там, и так для каждого цвета.
Тут вопрос в другом, тебе нужна функция которая очень быстро считывает пиксели в заданном участке, чтобы твой бот реагировал более-менее быстрее.

Как заставить мониторить определенный (нужный мне)участок?

warl0ck
30.03.2012, 22:57
Как заставить мониторить определенный (нужный мне)участок?

Autoit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) - PixelSearch ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) допустим, много ума не нужно чтоб импортировать метод. или же писать самому используя GetDC c user32.dll, ReleaseDC c user32.dll и собственно GetPixel с gdi32.dl

=PaLeTiZaToR=
31.03.2012, 04:52
Да что тут думать,можно делать через цикл: получаем всего количество точек на определённом участке, это будет 100%, потом получаем определённые цвета на участке, высчитываем их из 100%, потом проверяем если на участке какого то цвета 50%+ - то жмём что-то там, и так для каждого цвета.
Тут вопрос в другом, тебе нужна функция которая очень быстро считывает пиксели в заданном участке, чтобы твой бот реагировал более-менее быстрее.

Есле не сложно, обьясните пожалуйста
Как определить количество точек на определенном участке.
Как определить нужный цвет, есле он имеет множество оттенков. на глаз то он зеленый, но каждый 5ый пиксель имеет другой оттенок

Nickitee
31.03.2012, 10:57
Есле не сложно, обьясните пожалуйста
Как определить количество точек на определенном участке.
Как определить нужный цвет, есле он имеет множество оттенков. на глаз то он зеленый, но каждый 5ый пиксель имеет другой оттенок
Я вообще нуль в Delphi.
На c# это выглядело бы так:

for (int y = 0; y < Screen.Height; y++) //Ось y она же высота, если нужен определённый участок, то надо вместо Screen.Height задать максимум, а вместо int y = 0 - начало.
{

for (int x = 0; x < Screen.Width; x++) //Ось x она же ширина, если нужен определённый участок, то надо вместо Screen.Width задать максимум, а вместо int x = 0 - начало.
{
Color c = bit.GetPixel(x, y);
//Дальше мы просто можем проверить определённый пиксель на цвет
if (c == Color.FromArgb(255,0,0)) //Цвет из rgb - красный
{
//Что то делаем
}
//Либо мы можем высчитать сколько пикселей красного цвета или ~ красного
int red = 0;
if (c.R > 250 && c.R =< 255 && c.G =< 5 && c.B =< 5)
{
red++;
}
//Так же рассчитываем сколько пикселей нужного цвета
//И проверяем какого цвета больше
}
}

=PaLeTiZaToR=
01.04.2012, 03:50
Сделал так : скрин участка экрана и поиск цвета нужного. Дело в том что в игре все происходит быстро и бывает что нужно нажать кнопку 3 раза за секунду. Нужен более быстрый метод

Mebius
05.04.2012, 11:49
Сделал так : скрин участка экрана и поиск цвета нужного. Дело в том что в игре все происходит быстро и бывает что нужно нажать кнопку 3 раза за секунду. Нужен более быстрый метод

разгрузи процессор