Я делаю поиск картинок на экране по цепочке. И как только найдется первый объект выполняется с ним действие, он исчезает и цикл начинается по новой. Получается поиск повторяется с начала а не с места где он нашел первый объект и тратится много лишнего времени.
Как сделать чтобы сначала нашлись на экране все картинки а потом выполнить с ними одно из трех действий? Или как то по другому ускорить поиск
1. Martin - 18 Июля, 2022 - 07:13:28 - перейти к сообщению
2. KevinS - 18 Июля, 2022 - 08:28:06 - перейти к сообщению
CODE:
loop()
{
if(findimage(...)==1) действие;
if(findimage(...)==1) {действие; действие;}
if(findimage(...)==1) действие;
}
loop()
{
if(findimage(...)==1) действие;
if(findimage(...)==1) {действие; действие;}
if(findimage(...)==1) действие;
}
3. Martin - 18 Июля, 2022 - 08:42:05 - перейти к сообщению
KevinS , Проблема в том, что действия после нахождения картинки уводят в начало цикла и вернутся нет возможности в место где была найдена картинка и продолжить от туда. Такое решение не подойдет
(Добавление)
Это не было бы проблемой если бы картинок было меньше 100.
(Добавление)
Это не было бы проблемой если бы картинок было меньше 100.
4. Zireael - 18 Июля, 2022 - 08:47:22 - перейти к сообщению
Цитата:
поиск картинок
Непонятно что имеется ввиду. Поиск разных картинок или одной и той же.
Цитата:
одно из трех действий?
Как определять какое именно действие?
5. Martin - 18 Июля, 2022 - 09:12:17 - перейти к сообщению
Zireael , Поиск разных картинок, есть база картинок для findimage, так же есть поле где нужно найти эти картинки. Картинки могут повторятся.
После клика на найденную картинку появляется окно и в зависимости от того, что там написано /изображено, выбирается одно из трех действий.
Zireael пишет:
Как определять какое именно действие?
После клика на найденную картинку появляется окно и в зависимости от того, что там написано /изображено, выбирается одно из трех действий.
6. KevinS - 18 Июля, 2022 - 10:22:48 - перейти к сообщению
Martin пишет:
KevinS , Проблема в том, что действия после нахождения картинки уводят в начало цикла и вернутся нет возможности в место где была найдена картинка и продолжить от туда. Такое решение не подойдет
(Добавление)
Это не было бы проблемой если бы картинок было меньше 100.
(Добавление)
Это не было бы проблемой если бы картинок было меньше 100.
Не понимаю, а зачем действия после нахождения картинки уводят в начало цикла?
Цитата:
loop()
{
if(findimage(...)==1) Действие();
if(findimage(...)==1) Действие();
if(findimage(...)==1) Действие();
}
function Действие()
{
//тут в зависимости от того, что там написано /изображено, выбирается одно из трех
действий
}
После выполнения действия перехода в начало цикла не будет. Выполнятся следующие if(findimage(...)==1) Действие(); идущие ниже.
7. Zireael - 18 Июля, 2022 - 11:11:10 - перейти к сообщению
CODE:
string Path = "C:\Users\username\Desktop\image"; // путь к папке с картинками
int Image[200][100][100]; // массив для 200 картинок размером не более 100*100
string FileName[200]; // массив, в которой запишутся имена картинок
int ccord[4] = {6, 147, 113, 197}; // координаты поиска, левый верхний угол и правый нижний
int ResultArray[999][2]; // массив для координат всех найденных картинок
int CountFindImage; // переменная, в которой будет записано сколько всего нашлось картинок
int PosX[99], PosY[99]; // переменные для координат найденных картинок
int i;
int CountImage = dir(Path, #FileName[0], "file", "bmp"); // поиск bmp файлов в папке
messagebox("Количество картинок в папке: "+format(CountImage));
// загрузка картинок в массив
for(i=0; i<CountImage; i++)
{
if(loadimage(#Image[i][0][0], Path+"\"+FileName[i])<1)messagebox("Файл "+FileName[i]+" не загружен");
}
loop()
{
// поиск всех картинок
CountFindImage = 0;
for(i=0; i<CountImage; i++)
{
int Found = findimage(99, #Image[i][0][0], -1, #PosX[0], #PosY[0], ccord[0], ccord[1], ccord[2], ccord[3], -1);
for(int j=0; j<Found; j++)
{
ResultArray[CountFindImage][0] = ccord[0] + PosX[j];
ResultArray[CountFindImage][1] = ccord[1] + PosY[j];
CountFindImage++;
}
}
messagebox("Всего найдено изображений: "+format(CountFindImage));
for(i=0; i<CountFindImage; i++)
{
// тут выполняем нужные действия
mousemove(ResultArray[i][0], ResultArray[i][1]); // навести курсор на все найденные картинки
pause(500);
}
pause(3000);
messagebox("Повтор");
}
int Image[200][100][100]; // массив для 200 картинок размером не более 100*100
string FileName[200]; // массив, в которой запишутся имена картинок
int ccord[4] = {6, 147, 113, 197}; // координаты поиска, левый верхний угол и правый нижний
int ResultArray[999][2]; // массив для координат всех найденных картинок
int CountFindImage; // переменная, в которой будет записано сколько всего нашлось картинок
int PosX[99], PosY[99]; // переменные для координат найденных картинок
int i;
int CountImage = dir(Path, #FileName[0], "file", "bmp"); // поиск bmp файлов в папке
messagebox("Количество картинок в папке: "+format(CountImage));
// загрузка картинок в массив
for(i=0; i<CountImage; i++)
{
if(loadimage(#Image[i][0][0], Path+"\"+FileName[i])<1)messagebox("Файл "+FileName[i]+" не загружен");
}
loop()
{
// поиск всех картинок
CountFindImage = 0;
for(i=0; i<CountImage; i++)
{
int Found = findimage(99, #Image[i][0][0], -1, #PosX[0], #PosY[0], ccord[0], ccord[1], ccord[2], ccord[3], -1);
for(int j=0; j<Found; j++)
{
ResultArray[CountFindImage][0] = ccord[0] + PosX[j];
ResultArray[CountFindImage][1] = ccord[1] + PosY[j];
CountFindImage++;
}
}
messagebox("Всего найдено изображений: "+format(CountFindImage));
for(i=0; i<CountFindImage; i++)
{
// тут выполняем нужные действия
mousemove(ResultArray[i][0], ResultArray[i][1]); // навести курсор на все найденные картинки
pause(500);
}
pause(3000);
messagebox("Повтор");
}
8. konctantin777 - 19 Июля, 2022 - 10:28:13 - перейти к сообщению
А если я найду все зоны динамики, сохраню. Подскажите как потом искать динамику(чтобы кликнуть) исключая найденные места- не могу сообразить..
(Добавление)
Т. е.. задача- найти на экране всю динамику, чтобы потом искать динамику в местах где её не было при 1м поиске
(Добавление)
Искомый объект 5 пикселей. Если найти всю динамику и проверять, что она не попадает в найденные ранее места, то это же нагрузка большая, учитывая, что на треть экрана объекты могут быть. А виз редакторе можно искать исключая определённые зоны. Значит можно как то автоматом в исключение подставить ?
(Добавление)
Т. е.. задача- найти на экране всю динамику, чтобы потом искать динамику в местах где её не было при 1м поиске
(Добавление)
Искомый объект 5 пикселей. Если найти всю динамику и проверять, что она не попадает в найденные ранее места, то это же нагрузка большая, учитывая, что на треть экрана объекты могут быть. А виз редакторе можно искать исключая определённые зоны. Значит можно как то автоматом в исключение подставить ?
9. Zireael - 19 Июля, 2022 - 10:50:36 - перейти к сообщению
Цитата:
А если я найду все зоны динамики, сохраню. Подскажите как потом искать динамику(чтобы кликнуть) исключая найденные места
Искать динамику 2 раза в разные переменные, потом сравнивать координаты, записывая результат в отдельный массив.
10. konctantin777 - 19 Июля, 2022 - 11:04:47 - перейти к сообщению
Zireael пишет:
потом сравнивать координаты
При 1м поиске находится больше 500 мест динамики. Цикл же долгим получиться постоянно столько перебирать?