На видео демонстрируется работа этой функции в игре. Посмотреть видео поиска мобов в игре.
Тут демонстрируется поиск мультипликационного персонажа в реальном времени на видео.
Применяется для поиска объектов по указанию нескольких разных цветов которые есть в этом объекте и по ожидаемому размеру объекта (на этой площади должны найтись все пикселя). Можно указывать как разбежность цветов по 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);
textbkcolor (8454143,255);
int n=0;
s:if (n<k)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
n++;
goto s;
}
messagebox (format(k)+" объектов нашли");
//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);
textbkcolor (8454143,255);
int n=0;
s:if (n<k)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
n++;
goto s;
}
messagebox (format(k)+" объектов нашли");
Нажмите для увеличения
Пример поиска мобов по картинке ниже:
CODE:
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);
textbkcolor (8454143,255);
int n=0;
s:if (n<k)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
n++;
goto s;
}
messagebox (format(k)+" объектов нашли");
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);
textbkcolor (8454143,255);
int n=0;
s:if (n<k)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
n++;
goto s;
}
messagebox (format(k)+" объектов нашли");
Нажмите для увеличения
еще..
CODE:
int r=10;
int color[3], kol[3];
int x[20], y[20];
int colors, xw, yw;
color[0]=15990775; color[1]=8847032; color[2]=4192909;
kol[0]=1; kol[1]=1; kol[2]=1;
sleep(500);
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);
textbkcolor (8454143,255);
for (int n=0; n<k; n++)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
}
messagebox (format(k)+" объектов нашли");
int color[3], kol[3];
int x[20], y[20];
int colors, xw, yw;
color[0]=15990775; color[1]=8847032; color[2]=4192909;
kol[0]=1; kol[1]=1; kol[2]=1;
sleep(500);
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 30, 30, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);
textbkcolor (8454143,255);
for (int n=0; n<k; n++)
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
}
messagebox (format(k)+" объектов нашли");
Нажмите для увеличения
===========================================
Так указывается поиск на заранее созданном скрине
CODE:
int a[3000][2000];//Выделяем память. Выделить можно больше, с запасом, но не меньше. Если выделить меньше размеров скрина вернет ошибку.
screen (#a[0][0], 100, 200, 712, 636, -1);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 50, 50, 475, 313, 575, 413, r, r, r, r, r, r, #a[0][0]);
//int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 50, 50, 475, 313, 575, 413, #a[0][0]);
screen (#a[0][0], 100, 200, 712, 636, -1);
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 50, 50, 475, 313, 575, 413, r, r, r, r, r, r, #a[0][0]);
//int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 50, 50, 475, 313, 575, 413, #a[0][0]);