Zireael |
Отправлено: 11 Мая, 2023 - 10:10:31
|
Эксперт
Покинул форум
Сообщений всего: 4452
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:int Image[3][99][99]; // массив для картинок
// загрузить картинки
loadimage (#Image[0][0][0], "D:\Kibor2\Image_0.bmp"); // жёлтый треугольника
loadimage (#Image[1][0][0], "D:\Kibor2\Image_1.bmp"); // зелёный
loadimage (#Image[2][0][0], "D:\Kibor2\Image_2.bmp"); // фиолетовый
// массивы для координат найденных треугольников
int PosX_0[999], PosY_0[999];
int PosX_1[999], PosY_1[999];
int PosX_2[999], PosY_2[999];
int coord[4] = { 0, 0, 1920, 1080}; // координаты поиска
int p=100; // точность
int r=5; // отклонение цвета
// поиск картинок
int k0 = findimage(SWIFT, -1, #Image[0][0][0], 0, #PosX_0[0], #PosY_0[0], coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,p,1,-1);
int k1 = findimage(SWIFT, -1, #Image[1][0][0], 0, #PosX_1[0], #PosY_1[0], coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,p,1,-1);
int k2 = findimage(SWIFT, -1, #Image[2][0][0], 0, #PosX_2[0], #PosY_2[0], coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,p,1,-1);
messagebox("Найдено жёлтых: " + format(k0));
messagebox("Найдено зелёных: " + format(k1));
messagebox("Найдено фиолетовых: " + format(k2));
int i;
for(i=0; i<k0; i++)
{
mouse(LEFT, PosX_0[i] + coord[0], PosY_0[i] + coord[1]); // клик левой кнопкой мыши
sleep(500);
}
for(i=0; i<k1; i++)
{
mouse(RIGHT, PosX_1[i] + coord[0], PosY_1[i] + coord[1]); // клик правой кнопкой мыши
sleep(500);
}
for(i=0; i<k2; i++)
{
mousedbl(LEFT, PosX_2[i] + coord[0], PosY_2[i] + coord[1]); // двойной клик левой кнопкой мыши
sleep(500);
}
Пример картинки для поиска: https://ibb.co/g9V4Kmv
Т. к. цвет фона указан 0, то все пиксели чёрного цвета при поиске учитываться не будут. |
|
|
Zireael |
Отправлено: 11 Мая, 2023 - 17:52:48
|
Эксперт
Покинул форум
Сообщений всего: 4452
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Треугольники отличаются по краям, это видно при увеличении. Когда делаете картинку для поиска нужно чтобы края не были искомыми пикселями.
Цитата: И если их размер поменяется то тоже не найти их?
Тогда нужно другие картинки. Зависит от того насколько изменится размер, если незначительно, то можно сделать 1 шаблон.
Можно использовать findheapcolor, тогда размер не важен.
Ещё можно удалить из массива лишние изображения.
(Добавление)
Поиск через findheapcolor.
CODE:// массивы для координат найденных треугольников
int PosX_0[999], PosY_0[999];
int PosX_1[999], PosY_1[999];
int PosX_2[999], PosY_2[999];
int coord[4] = { 0, 0, 1920, 1080}; // координаты поиска
int yellow[1] = { 46847 }; // жёлтый
int green[1] = { 65450 }; // зелёный
int purple[1] = { 16713169 }; // фиолетовый
int r=5; // отклонение цвета
int kol[1] = { 200 }; // сколько должно совпасть пикселей
// поиск картинок
int k0 = findheapcolor(999, #yellow[0], #kol[0], 1, 1, #PosX_0[0], #PosY_0[0], 70, 40, 50, 50, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, -1);
int k1 = findheapcolor(999, #green[0], #kol[0], 1, 1, #PosX_1[0], #PosY_1[0], 40, 40, 50, 50, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, -1);
int k2 = findheapcolor(999, #purple[0], #kol[0], 1, 1, #PosX_2[0], #PosY_2[0], 40, 40, 50, 50, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, -1);
messagebox("Найдено жёлтых: " + format(k0));
messagebox("Найдено зелёных: " + format(k1));
messagebox("Найдено фиолетовых: " + format(k2));
int i;
for(i=0; i<k0; i++)
{
mouse(LEFT, PosX_0[i] + coord[0], PosY_0[i] + coord[1] + 20); // клик левой кнопкой мыши
sleep(500);
}
for(i=0; i<k1; i++)
{
mouse(RIGHT, PosX_1[i] + coord[0], PosY_1[i] + coord[1] + 20); // клик правой кнопкой мыши
sleep(500);
}
for(i=0; i<k2; i++)
{
mousedbl(LEFT, PosX_2[i] + coord[0], PosY_2[i] + coord[1] + 20); // двойной клик левой кнопкой мыши
sleep(500);
} (Отредактировано автором: 11 Мая, 2023 - 17:58:43) |
|
|
|