Kibor |
Отправлено: 22 Июля, 2013 - 00:29:46
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
В этой версии:
1) Произведен фикс непредсказуемого вылета программы.
2)Реализована функция поиска 2D изображений на экране по неполному совпадению.
Появилась возможность указывать в функции поиска изображений findimage дополнительные параметры с помощью которых можно указать разброс цветов в виде RGB в пределах которых пикселя исходного изображения и изображения на экране будет считаться идентичным.
Так же возможно указать процент пикселей участвующих в поиске (не учитывая фоновые участки) полного или в пределах параметров разброса RGB достаточно для идентификации изображения как совпавшего.
Пример использования:
CODE:findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, Красный_меньше_на, Красный_больше_на, Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на, Процент_совпадений_достаточный_для_идентификации, флаг_не_искать_в_области_где_найдено, -1);
Объяснение:
Каждый цвет состоит из трех основных цветов - Красный(R), Зеленый(G), Синий(B). (R, G, B). Каждый из этих трех цветов обозначается числом от 0 до 255. К примеру цвет (0, 0, 0) будет черный, а (255, 255, 255) белым. (255, 0, 0) красным, а (255, 50, 70) красным с примесью зеленого и синего.
Обозначение параметров:
Красный_меньше_на - тут указываем число НА которое красный компонент может быть меньше того что находится в поиске.
Красный_больше_на - тут указываем число НА которое красный компонент может быть больше того что находится в поиске.
Зеленый_меньше_на, Зеленый_больше_на, Синий_меньше_на, Синий_больше_на аналогично.
Процент_совпадений_достаточный_для_идентификации - процент от общего количества пикселей участвующих в поиске достаточный для того что бы изображение считалось совпавшим. 100 - необходимо что бы все изображение совпало. 20 - достаточно совпадения одной пятой части изображения. Применять для поиска изображений которые могут частично быть перекрыты или часть цвета пикселей может выйти за пределы колебаний описанных вышеприведенными параметрами.
флаг_не_искать_в_области_где_найдено - если не 1 больше не искать в областях на экране по размеру искомого рисунка где найден уже рисунок.
Пример:
CODE:findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, 20, 50, 50, 70, 10, 20, 33, 1, -1);
Ищем изображение совпавшее хотя бы на одну треть от того что ищем с колебаниями ДО:
меньше на 20 - больше на 50 красный, меньше на 50 - больше на 70 Зеленый, меньше на 10 - больше на 20 Синий.
Для сто процентного поиска изображений не нуждающихся в параметрах колебаний по цвету и процентного отношения необходимо применять функцию findimage без этих параметров:
CODE:findimage(1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, -1); |
|
|
Kibor |
Отправлено: 25 Июля, 2013 - 18:10:27
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Добавлена функция приводящая целое число int или дробное double к string
Пример применения format:
CODE:int a=5;
messagebox ("Переменная a равна "+format(a));
CODE:double a=5;
messagebox ("Переменная a плюс 0.27 равна "+format(a+0.27));
Применение format для копирования массива char в string.
Пример 1 (копирование всего масива начиная с нулевого индекса):
Будет qwert и еще какой то мусор, пока не встретим 0
CODE:char a[5];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
string s=format(#a[0]);//Копируем весь масив до нуля (когда a[...]==0). Означает конец строки
messagebox(s);
Поэтому на до в конце массива char ставить 0
CODE:char a[6];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
a[5]=0;
string s=format(#a[0]);//Копируем весь масив до нуля (когда a[...]==0). Означает конец строки
messagebox(s);
или
Пример 2 (копирование части масива начиная не с нулевого индекса):
CODE:char a[5];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
string s=format(#a[2], 3);//Указываем вторым параметром количество элементов которые надо скопировать
messagebox(s);
//В s строка ert
char a[5];
a[0]='q';
a[1]='w';
a[2]='e';
a[3]='r';
a[4]='t';
string s=format(#a[2], 2);//Указываем вторым параметром количество элементов которые надо скопировать
messagebox(s);
//В s строка er
Пример получения строки с двухмерного массива
CODE:char c[200][100];
c[0][0]='с'; c[0][1]='т'; c[0][2]='р'; c[0][3]='о'; c[0][4]='к'; c[0][5]='а'; c[0][6]=0;
c[1][0]='е'; c[1][1]='щ'; c[1][2]='е'; c[1][3]=0;
string s=format(#c[0][0]);
messagebox (s);//выведет "строка"
s=format(#c[1][0]);
messagebox (s);//выведет "еще"
Если копирование идет не с нулевого индекса надо ставить второй параметр, так как иначе будет скопированны данные которые идут дальше в памяти. |
|
|
Kibor |
Отправлено: 27 Июля, 2013 - 20:30:17
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
1) Добавлены математические и геометрические функции:
CODE:pow (5, 6); // возвращает число double равное возведению 5 во 6 степень. Принимает в виде параметров int или double
sqrt (157); // возвращает число double равное корню числа 157. Принимает в виде параметров int или double
cos (60); // возвращает число double равное косинусу 60 градусов. Принимает в виде параметров int или double
sin (30); // возвращает число double равное синусу 30 градусов. Принимает в виде параметров int или double
tan (50); // возвращает число double равное тангенсу 50 градусов. Принимает в виде параметров int или double
acos (0.5); // возвращает число double равное Акосинусу 0.5. Принимает в виде параметров double
asin (0.5); // возвращает число double равное Асинусу 0.5. Принимает в виде параметров double
atan (1.2); // возвращает число double равное Атангенсу 1.2. Принимает в виде параметров double
2) Добавлена функция sort
Функция имеет две вариации.
Назначение первой вариации функции сортировка элементов в масиве по возрастанию:
Первый параметр указатель на массив который будем сортировать.
Второй число элементов в массив начиная с первого которые будут участвовать в сортировке.
Пример
CODE:int a[5];
a[0]=10; a[1]=5; a[2]=6; a[3]=1; a[4]=2;
sort(#a[0], 5);//Сортировка массива по возрастанию
int h=0;
y:if (h<5)
{
messagebox (a[h]);//Тут идет по одному вывод элементов массива по возрастанию.
h++;
goto y;
}
Или
CODE:string i="";
int a[5];
a[0]=10; a[1]=5; a[2]=6; a[3]=1; a[4]=2;
sort(#a[0], 5);
int h=0;
y:if (h<5)
{
i=i+" "+format(a[h]);
h++;
goto y;
}
messagebox (i);//Тут идет вывод строкой
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
Использовать к примеру для сортировки координат XY полученных с помощью функции finddynamic или findimage от конкретной точки на экране по расстоянию:
CODE:sort(300, 200, #x[0], #y[0], 20);
Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат x[0] y[0] по расстоянию.
Третий и четвертый указатели на массивы координат XY полученные с помощью finddynamic или findimage.
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке. |
|
|
Kibor |
Отправлено: 29 Июля, 2013 - 00:14:43
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
1) Добавлена функция strcpy копирующая string в массив char
CODE:strcpy(#a[0], "строка");
Первый параметр указатель на массив char. Он должен быть на 1 больше количества символов в строке.
Второй - строка string которую скопируем в массив.
В первый элемент массива после строки запишется 0
Пример заполнения двухмерного массива char построчно
Цитата: char c[200][100];
strcpy(#c[0][0], "строка");
strcpy(#c[1][0], "еще");
//В памяти будет
c[0][0]='с', c[0][1]='т', c[0][2]='р', c[0][3]='о', c[0][4]='к', c[0][5]='а', c[0][6]=0;
c[1][0]='е', c[1][1]='щ', c[1][2]='е', c[1][3]=0;
messagebox (format(#c[0][0]));//"строка"
messagebox (format(#c[1][0]));//"еще"
2) Добавлена функция size. Она возвращает количество элементов массива char до первого нуля или длину строки string.
CODE:int size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
CODE:int size_char=size("привет, это строка");//Узнаем количество элементов в строке
Параметр принимает указатель на массив char или string
Пример использования:
CODE:char a[256];//Сюда будем копировать. Размер массива хоть на 1 элемент должен больше быть строки, поскольку 1 элемент массива после строки заполнится нулем
string b="qwertyuio";
strcpy(#a[0], b);//Копируем string в массив char. После последнего элемента строки в массиве запишется 0
int size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
int h=0;
i:if (h<size_char)
{
messagebox(a[h]);
h++;
goto i;
}
Пример как добавить строку к уже записанной с массив
CODE:char a[256];//Сюда будем копировать. Размер массива хоть на 1 элемент должен больше быть строки, поскольку 1 элемент массива после строки заполнится нулем
string b="qwert-";
strcpy(#a[0], b);//Копируем string в массив char. После последнего элемента строки в массиве запишется 0
string b1="добавка";
int size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
strcpy(#a[size_char], b1);//Копируем в массив начиная с указателя на элемент с концом строки (нулем)
size_char=size(#a[0]);//Узнаем количество элементов в массиве char до первого нуля
int h=0;
i:if (h<size_char)
{
messagebox(a[h]);
h++;
goto i;
}
пример получения размера строки двухмерного массива char
Цитата: char c[200][100];
c[0][0]='с', c[0][1]='т', c[0][2]='р', c[0][3]='о', c[0][4]='к', c[0][5]='а', c[0][6]=0;
c[1][0]='е', c[1][1]='щ', c[1][2]='е', c[1][3]=0;
int N=size(#c[0][0]);//в N будет размер "строка". то есть 6
N=size(#c[1][0]);//в N будет размер "еще". то есть 3
3) Добавлена функция getkeystate. С помощью нее можно узнать состояние кнопок клавиатуры и мыши - нажаты\не нажаты.
Принимает параметр int - код клавиши мыши или клавиатуры. Так же можно в виде параметра указывать константу. Коды клавиш и константы можно узнать в Таблица кодов клавиш клавиатуры и кнопок мыши
Возвращает 1 если кнопка нажата. 0 если не нажата.
CODE:getkeystate(65)//Вернут состояние клавиши A
getkeystate(RETURN)//Вернут состояние клавиши Enter
getkeystate(LBUTTON)//Вернут состояние левой кнопки мыши
Пример
CODE:int n=0;
u: if (n<222)
{
if (getkeystate(n)==1)
{
if (n==27)goto exit;//Нажат Esc. Выход
messagebox("Нажата клавиша с кодом "+format(n));
}
n++;
goto u;
}
n=0;
goto u;
exit:; |
|
|
|