Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
findheapcolor - Ищет области на которых есть скученности пикселей определенных цветов. Можно искать на экране, окне или с двухмерном массиве int в котором находится изображение.
Применяется для поиска объектов по указанию нескольких разных цветов которые есть в этом объекте и по ожидаемому размеру объекта (на этой площади должны найтись все пикселя). Можно указывать как разбежность цветов по RGB так и минимальное количество (оно может быть меньше) чем указанное количество цветов которые должны быть в объекте. Так же указывается область где больше не искать. Эта область располагается ниже первого найденного пикселя по Y и по середине по X.
К примеру одна сторона идентифицируется по 5 цветам
23432 6864554 99888 255 88989
а другая по
23432 6864554 99888 76645 88989
Поэтому в минимально требуемом количестве надо указать 4
Подобрать оптимальные цвета и их количество с учетом разбежности цвета можено с помощью этого инструмента Подбор Цвета Кибор.
синтаксис без разбежности в цвете: findheapcolor(сколько_ищем, #color[0], #kol[0], сколько_цветов, сколько_цветов_надо_минимум, #x[0], #y[0], X_размер, Y размер, Размер_области_где не искать X, Размер_области_где не искать Y, старт_X_поиска, старт_Y_поиска, финиш_X_поиска, финиш_X_поиска, (указатель на окно или указатель на двухмерный массив int с изображением или -1));
синтаксис с разбежностью в цвете: findheapcolor(сколько_ищем, #color[0], #kol[0], сколько_цветов, сколько_цветов_надо_минимум, #x[0], #y[0], X_размер, Y размер, Размер_области_где не искать X, Размер_области_где не искать Y, старт_X_поиска, старт_Y_поиска, финиш_X_поиска, финиш_X_поиска, Красный_меньше_на, Красный_больше_на, Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на , (указатель на окно или указатель на двухмерный массив int с изображением или -1));
Если первый параметр -1 - все искать.
#color[0] указатель на массив int в котором находятся искомые цвета пикселей
#kol[0] указатель на массив int в котором находятся сколько каждого цвета должно быть пикселей для того что бы цвет совпавшим считался. Например в kol[0] находится количество для color[0]. в kol[1] находится количество для color[1].
#x[0], #y[0] - int массив в котором будут координаты первого найденного пикселя в куче.
Возвращает количество найденных объектов.
Ошибки
-1 - массив приемника X меньше найденных скученностей
-2 - массив приемника X меньше найденных скученностей
-3 - размер ожидаемого объекта по X меньше области поиска
-4 - размер ожидаемого объекта по Y меньше области поиска
-5 - массив цветов меньше указанных в количестве в параметре 4
-6 - массив количества для каждого цвета меньше указанных в количестве в параметре 4
Пояснение:
Нажмите для увеличения
Пример поиска по картинке ниже. выберите 2 или 3 цвета:
CODE:
int min_col=3;//Найти если все три цвета
//int min_col = 2;//Достаточно только любых 2
int r=10;
int color[3];
color[0]=2366701; color[1]=5026082; color[2]=13387839;//Тут цвета
int kol[3];
kol[0]=55; kol[1]=55; kol[2]=55;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
int colors, xw, yw;
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);
int color[3];
int r=5;
color[0]=2899273; color[1]=2899273; color[2]=791579;//Тут цвета
int kol[3];
kol[0]=25; kol[1]=25; kol[2]=25;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
int colors, xw, yw;
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 70, 80, 0, 0, xw, yw, r, r, r, r, r, r, -1);
int a[3000][2000];//Выделяем память. Выделить можно больше, с запасом, но не меньше. Если выделить меньше размеров скрина вернет ошибку.
screen (#a[0][0], 100, 200, 712, 636, -1);
Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013 Откуда: Молдова, Кишинев
Репутация: 0
чем быстрее искать при помощи finddynamic или findheapcolor?
Kibor
Отправлено: 22 Января, 2014 - 20:41:52
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
rev41k пишет:
чем быстрее искать при помощи finddynamic или findheapcolor?
хм.. зависит от ситуации... если правильно применять findheapcolor то им.
если в нее засунуть цвет который много в фоне, то долго будет.. но так делать не надо так как нет смысла. к примеру если открыть блокнот - белый и искать на нем белый цвет с
findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 30, 30 то долго. но так делать никто не будет, так как нет логики искать в объекте цвет который много в фоне...
ну а при правильном применение конечно findheapcolor будет быстрее, особенно если поставить findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 80, 80 побольше. его надо так выставить что бы весь в него влез объект.
finddynamic изначально должен иметь между собой паузу. что б успел сменить экран картинку.
короче если findheapcolor подходит - то он.
если объекты полностью разные имеют цвета - finddynamic
rev41k
Отправлено: 22 Января, 2014 - 21:19:07
Наблюдатель
Покинул форум
Сообщений всего: 31
Дата рег-ции: Нояб. 2013 Откуда: Молдова, Кишинев
Репутация: 0
Kibor пишет:
rev41k пишет:
чем быстрее искать при помощи finddynamic или findheapcolor?
хм.. зависит от ситуации... если правильно применять findheapcolor то им.
если в нее засунуть цвет который много в фоне, то долго будет.. но так делать не надо так как нет смысла. к примеру если открыть блокнот - белый и искать на нем белый цвет с
findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 30, 30 то долго. но так делать никто не будет, так как нет логики искать в объекте цвет который много в фоне...
ну а при правильном применение конечно findheapcolor будет быстрее, особенно если поставить findheapcolor(-1, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 80, 80 побольше. его надо так выставить что бы весь в него влез объект.
finddynamic изначально должен иметь между собой паузу. что б успел сменить экран картинку.
короче если findheapcolor подходит - то он.
если объекты полностью разные имеют цвета - finddynamic
Спасибо , учим findheapcolor();
Prusak
Отправлено: 05 Апреля, 2014 - 12:41:12
Наблюдатель
Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2014
Репутация: 0
Kibor пишет:
старт_X_поиска, старт_Y_поиска
если указать не 0,0 а допустим 640,35 чтоб сканировать не весь экран. то #x[0], #y[0] выдает искаженные координаты вообще в другой части экрана. хотя искомое находит.
HACMOPK
Отправлено: 05 Апреля, 2014 - 13:02:50
Участник
Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013
Репутация: 4
Prusak пишет:
Kibor пишет:
старт_X_поиска, старт_Y_поиска
если указать не 0,0 а допустим 640,35 чтоб сканировать не весь экран. то #x[0], #y[0] выдает искаженные координаты вообще в другой части экрана. хотя искомое находит.
Работаешь с экранными координатами или с оконными?
Prusak
Отправлено: 05 Апреля, 2014 - 13:18:27
Наблюдатель
Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2014
Репутация: 0
PHP:
win aa=window ("- ArcheAge - Mar 27 2014 (03:47:57) Аранзеб", "ArcheAge", -1);
activate(aa);
////////////////////////////////////
int min_col=3;//Найти если все три цвета
int xw=1024;
int yw=768;
int r=10;
int color[3];
color[0]=12696972; color[1]=11971194; color[2]=10983788;//Тут цвета
int kol[3];
kol[0]=2; kol[1]=2; kol[2]=2;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
findheapcolor(1, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, aa);
mousemove(x[0], y[0],aa);
messagebox(format(x[0])+","+format(y[0]));
окно (Добавление)
хм.. похоже это у меня какие то проблемы. даже из примера поиск 3Д моделей мышка перемещается куда угодно только не на моба.
HACMOPK
Отправлено: 05 Апреля, 2014 - 15:30:29
Участник
Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013
Репутация: 4
#x[0], #y[0] - int массив в котором будут координаты первого найденного пикселя в куче.
я так подразумеваю что там находятся оконные координаты на который ссылается указатель аа,в mousemove как и в findheapcolor также имеется данный указатель. теперь получается функциям ссылающим на данный масив так же надо делать преписку +50 +70...ничего не понимаю поясните дураку как ето работает ?
HACMOPK
Отправлено: 05 Апреля, 2014 - 23:26:58
Участник
Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2013
Репутация: 4
Допустим ищем красный цвет на экране.( 0, 0, xw, yw);
находим в координатах 255,255
mousemove(x[0], y[0],aa); все хорошо.
далее мы знаем что красного цвета в координатах 50,70 нет, задаем поиск ( 50, 70, xw, yw);
находим, но начальной точкой поиска служит точка 50,70 в результате получаем координаты 205,185.
mousemove(x[0], y[0],aa); начинает "движение" с 0,0 и приходит в координату 205,185.
Как- то так.
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.