Здравствуйте!
Есть ли возможность или функция, с помощью которых можно обвести распознанное изображение поверх окна игры рамкой (или перекрестием) в экранных координатах, работающая аналогично функции TEXTOUT - постоянно обновляющая изображение?
1. lavpochta - 27 Февраля, 2021 - 09:10:12 - перейти к сообщению
2. Zireael - 27 Февраля, 2021 - 09:13:33 - перейти к сообщению
CODE:
int array[1920][1080];
initialarray(#array[0][0], 255);
loop()
{
visual(200, 100, 700, 500, 3); // координаты рамки и толщина линии
sleep(10);
}
function visual(int sx, int sy, int ex, int ey, int width)
{
visualwindow(0, 0, 0, ex-sx, width, sx, sy, 100, #array[0][0]);
visualwindow(1, 0, 0, width, ey-sy, sx, sy, 100, #array[0][0]);
visualwindow(2, 0, 0, ex-sx+width, width, sx, ey, 100, #array[0][0]);
visualwindow(3, 0, 0, width, ey-sy, ex, sy, 100, #array[0][0]);
}
initialarray(#array[0][0], 255);
loop()
{
visual(200, 100, 700, 500, 3); // координаты рамки и толщина линии
sleep(10);
}
function visual(int sx, int sy, int ex, int ey, int width)
{
visualwindow(0, 0, 0, ex-sx, width, sx, sy, 100, #array[0][0]);
visualwindow(1, 0, 0, width, ey-sy, sx, sy, 100, #array[0][0]);
visualwindow(2, 0, 0, ex-sx+width, width, sx, ey, 100, #array[0][0]);
visualwindow(3, 0, 0, width, ey-sy, ex, sy, 100, #array[0][0]);
}
3. lavpochta - 27 Февраля, 2021 - 09:36:22 - перейти к сообщению
Спасибо!!! Это то что надо!
4. lavpochta - 06 Марта, 2021 - 16:26:12 - перейти к сообщению
Здраствуйте!
Никак не могу понять почему не ищет картинку из одного массива в другом?
Почему возвращает a=-4 ???
scX_HP_Mob[0]=-842150451 (видно, что поиск само собой безрезультатный)
Никак не могу понять почему не ищет картинку из одного массива в другом?
CODE:
int sc1_HP_Mob[224][3];
int sc2_HP_Mob[222][1];
int a;//для оперативного мусора
int scX_HP_Mob[1], scY_HP_Mob[1];//координаты картинки
int X_scr, Y_scr;
//...
int X1_HP_Mob=200;// к примеру
int X2_HP_Mob=393;// к примеру, приведет длине картинки по оси Х=195
int Y1_HP_Mob=50;// к примеру
if (screen(#sc1_HP_Mob[0][0], X1_HP_Mob-1, Y1_HP_Mob-1, X2_HP_Mob+1, Y1_HP_Mob+2, -1)==1)//Вырезаем полоску 195х3пикс
{
a=0;
X_scr=imagewidth(#sc1_HP_Mob[0][0]);//=195
Y_scr=imageheight(#sc1_HP_Mob[0][0]);//=3
}
//...
if (screen(#sc2_HP_Mob[0][0], X1_HP_Mob, Y1_HP_Mob, X2_HP_Mob, Y1_HP_Mob+1, -1)==1)//Вырезаем полоску 193х1пикс
{
a=0;
}
//...
a=findimage(1, #sc2_HP_Mob[0][0], -1, #scX_HP_Mob[0], #scY_HP_Mob[0], 0, 0, X_scr, Y_scr, #sc1_HP_Mob[0][0]);//Ищем маленькую полоску в большой
messagebox("a="+format(a)+" scX_HP_Mob[0]="+format(scX_HP_Mob[0]));
int sc1_HP_Mob[224][3];
int sc2_HP_Mob[222][1];
int a;//для оперативного мусора
int scX_HP_Mob[1], scY_HP_Mob[1];//координаты картинки
int X_scr, Y_scr;
//...
int X1_HP_Mob=200;// к примеру
int X2_HP_Mob=393;// к примеру, приведет длине картинки по оси Х=195
int Y1_HP_Mob=50;// к примеру
if (screen(#sc1_HP_Mob[0][0], X1_HP_Mob-1, Y1_HP_Mob-1, X2_HP_Mob+1, Y1_HP_Mob+2, -1)==1)//Вырезаем полоску 195х3пикс
{
a=0;
X_scr=imagewidth(#sc1_HP_Mob[0][0]);//=195
Y_scr=imageheight(#sc1_HP_Mob[0][0]);//=3
}
//...
if (screen(#sc2_HP_Mob[0][0], X1_HP_Mob, Y1_HP_Mob, X2_HP_Mob, Y1_HP_Mob+1, -1)==1)//Вырезаем полоску 193х1пикс
{
a=0;
}
//...
a=findimage(1, #sc2_HP_Mob[0][0], -1, #scX_HP_Mob[0], #scY_HP_Mob[0], 0, 0, X_scr, Y_scr, #sc1_HP_Mob[0][0]);//Ищем маленькую полоску в большой
messagebox("a="+format(a)+" scX_HP_Mob[0]="+format(scX_HP_Mob[0]));
Почему возвращает a=-4 ???
scX_HP_Mob[0]=-842150451 (видно, что поиск само собой безрезультатный)
5. Zireael - 06 Марта, 2021 - 16:36:04 - перейти к сообщению
Цитата:
Почему возвращает a=-4 ???
В случае ошибки возвращает:
-1 размер масива в который записываются X координаты меньше найденых изабражений
-2 размер масива в который записываются Y координаты меньше найденых изабражений
-3 Область поиска меньше искомого рисунка по X
-4 Область поиска меньше искомого рисунка по Y
(Добавление)
Баг похоже.
CODE:
int image1[10][3];
int image2[10][1];
int x, y;
screen(#image1[0][0], 0, 0, 9, 3, -1);
screen(#image2[0][0], 0, 0, 9, 1, -1);
int result =findimage(1, #image2[0][0], -1, #x, #y, 0, 0, 9, 1, #image1[0][0]);
messagebox(result);
int image2[10][1];
int x, y;
screen(#image1[0][0], 0, 0, 9, 3, -1);
screen(#image2[0][0], 0, 0, 9, 1, -1);
int result =findimage(1, #image2[0][0], -1, #x, #y, 0, 0, 9, 1, #image1[0][0]);
messagebox(result);
Так нормально:
CODE:
int image1[10][3];
int image2[10][1];
int x, y;
screen(#image1[0][0], 0, 0, 10, 3, -1);
screen(#image2[0][0], 0, 0, 10, 1, -1);
int result =findimage(1, #image2[0][0], -1, #x, #y, 0, 0, 10, 1, #image1[0][0]);
messagebox(result);
int image2[10][1];
int x, y;
screen(#image1[0][0], 0, 0, 10, 3, -1);
screen(#image2[0][0], 0, 0, 10, 1, -1);
int result =findimage(1, #image2[0][0], -1, #x, #y, 0, 0, 10, 1, #image1[0][0]);
messagebox(result);
Выделяйте больше памяти для картинки. Так нет ошибки:
CODE:
int image1[10][3];
int image2[10][2];
int x, y;
screen(#image1[0][0], 0, 0, 9, 3, -1);
screen(#image2[0][0], 0, 0, 9, 1, -1);
int result =findimage(1, #image2[0][0], -1, #x, #y, 0, 0, 9, 1, #image1[0][0]);
messagebox(result);
int image2[10][2];
int x, y;
screen(#image1[0][0], 0, 0, 9, 3, -1);
screen(#image2[0][0], 0, 0, 9, 1, -1);
int result =findimage(1, #image2[0][0], -1, #x, #y, 0, 0, 9, 1, #image1[0][0]);
messagebox(result);