DeLiberate |
Отправлено: 29 Января, 2015 - 05:10:33
|
Участник
Покинул форум
Сообщений всего: 63
Дата рег-ции: Янв. 2015
Репутация: 0
|
CODE:
win wind=window ("Ваше окно...", -1); //указатель на окно.
int Image_a[8][7];
int Image_b[7][6];
int Image_c[8][6];
loadimage (#Image_a[0][0], "C:\Users\Kolya\Documents\Image_a.bmp");
loadimage (#Image_b[0][0], "C:\Users\Kolya\Documents\Image_b.bmp");
loadimage (#Image_c[0][0], "C:\Users\Kolya\Documents\Image_c.bmp");
int PosX_a[1];
int PosY_a[1];
int PosX_b[1];
int PosY_b[1];
int PosX_c[1];
int PosY_c[1];
q:
//ищем 3 изображения
int a=findimage(1, #Image_a[0][0], 0, #PosX_a[0], #PosY_a[0], x_старт, у_старт, х_конец, у_конец, 0, 0, 0, 0, 0, 0, 0, 0, wind);
int b=findimage(1, #Image_b[0][0],0,#PosX_b[0],#PosY_b[0], x_старт, у_старт, х_конец, у_конец, 0, 0, 0, 0, 0, 0, 0, 0, wind);
int c=findimage(1, #Image_c[0][0], 0, #PosX_c[0], #PosY_c[0], x_старт, у_старт, х_конец, у_конец, 0, 0, 0, 0, 0, 0, 0, 0, wind);
if (a==1||b==1||c==1);
{
beep(500,2000); //если есть хоть одно из изображений - пикаем.
}
else
{
goto q; //если не нашли - повторяем заново.
}
Не забудьте объявить указатель на свое окно.
Заменить изображения и массивы для них на свои.
Обозначить области, где будет происходить поиск изображений.
При необходимости добавить еще изображений и их поиск, по аналогии. |
|
|
yo1 |
Отправлено: 29 Января, 2015 - 09:28:48
|
Участник
Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2014
Репутация: 0
|
balabashka пишет: Изображение появляется различное.
Если изображений >3 (в коде выше их 3), то лучше сделать так:
CODE:
q:
if (findimage(1, #Image_1[0][0], 0, #PosX_a, #PosY_a, 0, 0, 1280, 768, wind)==1)
{
beep(500,2000);
}
else
{
goto q;
}
|
|
|
DeLiberate |
Отправлено: 29 Января, 2015 - 14:18:49
|
Участник
Покинул форум
Сообщений всего: 63
Дата рег-ции: Янв. 2015
Репутация: 0
|
yo1 пишет:
q:
if (findimage(1, #Image_1[0][0], 0, #PosX_a, #PosY_a, 0, 0, 1280, 768, wind)==1)
{
beep(500,2000);
}
else
{
goto q;
}
В таком случае, мы можем обозначить одно изображение для поиска, и если его нет - то повторяем. Это не подходит.
есть вариант
Цитата: q:
if (findimage(1, #Image_1[0][0], 0, #PosX_a, #PosY_a, 0, 0, 1280, 768, wind)!=1)
{
beep(500,2000);
}
else
{
goto q;
}
И в качестве искомого изображения использовать изображение меню, только без бонуса - это не практично, так как если изображение изменится не от бонуса, будет звук, а это плохо.(Отредактировано автором: 29 Января, 2015 - 14:19:43) |
|
|
yo1 |
Отправлено: 29 Января, 2015 - 18:44:46
|
Участник
Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2014
Репутация: 0
|
DeLiberate пишет: if (findimage(1, #Image_1[0][0], 0, #PosX_a, #PosY_a, 0, 0, 1280, 768, wind)!=1)
Обычно использую ==1 или ==0. DeLiberate пишет: И в качестве искомого изображения использовать изображение меню, только без бонуса
Если заранее известно, что у бонуса картинка одного вида и не меняется, то можно привязать к нему, т.е. есть\нет.
Если картинки с бонусами разные, тогда да, ваш код будет удачнее. |
|
|
DeLiberate |
Отправлено: 29 Января, 2015 - 19:09:11
|
Участник
Покинул форум
Сообщений всего: 63
Дата рег-ции: Янв. 2015
Репутация: 0
|
Исходил из этого.
balabashka пишет: Изображение появляется различное.
yo1 пишет: Обычно использую ==1 или ==0.
Верно, так и нужно делать. |
|
|
1ledi |
Отправлено: 12 Мая, 2019 - 13:04:38
|
Прохожий
Покинул форум
Сообщений всего: 1
Дата рег-ции: Май 2019
Репутация: 0
|
Здравствуйте подскажите где прописывать зону поиска в этом коде
q:int b=findimage(-1, #Image_1[0][0], 0, #PosX_1[0], #PosY_1[0], 0, 0, xe, ye, 50, 50, 50, 50, 50, 50, 90, 1, -1);
мне надо х1274 y139 правый нижний угол x1389 y920 .
Полный код
int Image_1[27][48];
int Image_2[27][48];
int color, xe, ye;
sleep(1000);
getdisplay(color, xe, ye);
loadimage (#Image_1[0][0], "C:\peshka\Image 1. bmp"
loadimage (#Image_2[0][0], "C:\peshka\Image-2.bmp"
int PosX_s[0];
int PosX_b[1];
int PosY_b[1];
int PosX_1[512];int PosY_1[512];
int PosX_0[512];int PosY_0[512];
///////////////////////////////////////////////////////////////////////////////////////////////////
q:int b=findimage(-1, #Image_1[0][0], 0, #PosX_1[0], #PosY_1[0], 0, 0, xe, ye, 50, 50, 50, 50, 50, 50, 90, 1, -1);
sleep(500);
if (b==1);
Сильно не пенайте я всего четыре дня пытаюсь что то понять методом проб и ошибок |
|
|
Zireael |
Отправлено: 12 Мая, 2019 - 18:37:45
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Синтаксис:
findimage(-1, #image[0][0], fon_color, #x[0], #y[0], x_start, y_start, x_finish, y_finish, wind);
Первый параметр - если -1 - искать все совпадающие изображения и записывать их в масив. Если не -1 , к примеру 5... искать до 5 включительно совпадений и завершать поиск.
Второй - указатель на масив int в котором хранится искомое изображение.
Третий - фоновый цвет который не учитывается при сравнение изображений. Если указать -1, все цвета учитываются. В виде фонового цвета можно указать цвет конкретного пикселя искомой картинки - image[0][0] (цвет левого верхнего пикселя)... и т.д.
Четвертый и пятый - указатели на одномерные масивы int, в которые будут сохранены координаты найденых в окне изображений.
Шестой и седьмой - стартовые клиентские координаты в окне в котором ищется изображение относительно верхнего левого угла.
Восьмой и девятый - клиентские координаты окончания поиска в окне в котором ищется изображение.
Десятый - указатель на окно в котором ищем изображение. При -1 ищется по всему экрану.
Цитата: Функцию findimage так же можно использовать для поиска изображений имеющих отклонения цветов от исходного изображения, или по неполному (к примеру частично перекрытому другим изображением). В этом случае findimage принимает 17 параметров:
findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, Красный_меньше_на, Красный_больше_на, Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на, Процент_совпадений_достаточный_для_идентификации, флаг_не_искать_в_области_где_найдено, -1); |
|
|
|