Здравствуйте, гость ( Вход | Регистрация )

> Создание картинки для FindImage скриптом, Готовый скрипт
cirus
сообщение 16.1.2017, 14:23
Сообщение #1


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Создание картинки для FindImage скриптом, версия 1
Код
set %path [1] "C:\"                // путь для сохранения картинок
set #color 1                       // 1 - закрасить левый верхний пиксель, 0 - не закрашивать
init_arr %rgb (1) 255 0 0          // цвет для закрашивания в формате RGB
set #hint 1                        // 1 - выводить подсказку, 0 - не выводить


set linedelay 0
set workwindow 0
set $imya prompt (Введите имя картинки)
set %imya [1] $imya
while workwindow = 0
    if  #hint = 1
        hint (20 clRed 500 500 (Указать левый верхний угол картинки\nНажать Ctrl+ A))
    end_if
    wait 100
end_while
set #StartX mousepos_x
set #StartY mousepos_y
set workwindow 0

while workwindow = 0
    if  #hint = 1
        hint (20 clRed 500 500 (Указать правый нижний угол картинки\nНажать Ctrl+ A))
    end_if
    wait 100
end_while
hint (10 clblack 1920 0 (1))
set %a GetImage (#StartX #StartY mousepos_x mousepos_y)

if  #color = 0
    set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
else
    set workwindow windowhandle
    set #r %rgb [1 1]
    set #g %rgb [1 2]
    set #b %rgb [1 3]
    writemem #b %a [1 1] b
    writemem #g eval(%a [1 1] + 1) b
    writemem #r eval(%a [1 1] + 2) b
    set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
end_if

Скрипт позволяет сохранить картинку для Findimage без использования Paint, Photoshop и прочих.
Минимальная версия пилота 2.39. Запускать от администратора.
Пример: https://youtu.be/c6GsCBNcT40
1. Запустить скрипт.
2. Ввести имя картинки.
3. Навести курсор на левый верхний угол будущей картинки, нажать Ctrl + A.
4. Навести курсор на правый нижний угол будущей картинки, нажать Ctrl + A.
5. Картинка сохранится в указанной папке. Если переменная #color 1, то левый верхний пиксель будет закрашен в цвет указанный в %rgb.
Для увеличения изображения можно использовать лупу в программе InqSoft Window Scanner.

Создание картинки для FindImage скриптом, версия 2
Код
set %path [1] "C:\"                // путь для сохранения картинок
set #color 2                       // 1 - закрасить левый верхний пиксель, 0 - не закрашивать, 2 - закрасить фон
init_arr %rgb (1) 255 0 0          // цвет для закрашивания в формате RGB
set #hint 1                        // 1 - выводить подсказку, 0 - не выводить
   // если #color = 2
set #nopaint 16160002              // цвет, который не будет закрашен
set #deviat 20                     // погрешность по цвету в %


set linedelay 0
set workwindow 0
set $imya prompt (Введите имя картинки)
set %imya [1] $imya

while workwindow = 0
    if  #hint = 1
        hint (20 clRed 500 500 (Указать левый верхний угол картинки\nНажать Ctrl+ A))
    end_if
    wait 100
end_while
set #StartX mousepos_x
set #StartY mousepos_y
set workwindow 0

while workwindow = 0
    if  #hint = 1
        hint (20 clRed 500 500 (Указать правый нижний угол картинки\nНажать Ctrl+ A))
    end_if
    wait 100
end_while
hint (10 clblack 1920 0 (1))
set %a GetImage (#StartX #StartY mousepos_x mousepos_y)

if  #color = 0
    set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
else
    set workwindow windowhandle
    set #r %rgb [1 1]
    set #g %rgb [1 2]
    set #b %rgb [1 3]
    writemem #b %a [1 1] b
    writemem #g eval(%a [1 1] + 1) b
    writemem #r eval(%a [1 1] + 2) b
    if  #color = 2
        set $color colortorgb (#nopaint %color)
        set #delta %a [1 4] - (%a [1 4] - %a [1 2] * 3 + 1)
        for #j 0 eval(%a [1 3] - 1)
            for #i 0 #delta 3
                set #z %a [1 1] + %a [1 4] * #j + #i
                set #z1 %a [1 1] + %a [1 4] * #j + #i + 1
                set #z2 %a [1 1] + %a [1 4] * #j + #i + 2
                readmem #b #z b
                readmem #g #z1 b
                readmem #r #z2 b
                gosub rgb
                if  #rmin > %color [1 1] or #rmax < %color [1 1] or #gmin > %color [1 2] or #gmax < %color [1 2] or #bmin > %color [1 3] or #bmax < %color [1 3]
                    set #rpaint %rgb [1 1]
                    set #gpaint %rgb [1 2]
                    set #bpaint %rgb [1 3]
                    writemem #bpaint #z b
                    writemem #gpaint #z1 b
                    writemem #rpaint #z2 b
                end_if
            end_for
        end_for
        hint (20 clRed 500 500 (Картинка сохранена))
        wait 1000
        hint (10 clblack 1920 0 (1))
    end_if
    set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
end_if
end_script

:rgb
    set #rmin #r - 255 * #deviat / 100
    set #rmax #r + 255 * #deviat / 100
    set #gmin #g - 255 * #deviat / 100
    set #gmax #g + 255 * #deviat / 100
    set #bmin #b - 255 * #deviat / 100
    set #bmax #b + 255 * #deviat / 100

    set #dev 255 * #deviat / 100
    set #bmin #b - #dev
    set #bmax #b + #dev
    if  #bmax > 255
        set #bmax 255
    end_if
    if  #bmin < 0
        set #bmin 0
    end_if
    set #gmin #g - #dev
    set #gmax #g + #dev
    if  #gmax > 255
        set #gmax 255
    end_if
    if  #gmin < 0
        set  #gmin 0
    end_if
    set #rmin #r - #dev
    set #rmax #r + #dev
    if  #rmax > 255
        set #rmax 255
    end_if
    if  #rmin < 0
        set #rmin 0
    end_if
return

Если #color 2 - будет закрашен весь фон. Указать в #nopaint цвет, который закрашивать не нужно и в #deviat процент погрешности по цвету. Актуально для текста.
https://youtu.be/AiIN6DE2OTI


Создание картинки для FindImage скриптом, поиск статичных точек
Код
set %path [1] "C:\"                // путь для сохранения картинок
init_arr %rgb (1) 255 0 0          // цвет для закрашивания фона в формате RGB
set #hint 1                        // 1 - выводить подсказку, 0 - не выводить
set #deviat 0                      // погрешность в цвете


set linedelay 0
set workwindow 0
set $imya prompt (Введите имя картинки)
set %imya [1] $imya

while workwindow = 0
    set #handle getwindow (0)
    if  #handle != WindowHandle
        set windowpos -1 -1 -1 1 WindowHandle
    end_if
    if  #hint = 1
        hint (20 clRed 400 400 (Наведите курсор на ЛЕВЫЙ ВЕРХНИЙ угол\nанализируемого объекта и нажмите Ctrl+A))
    end_if
    wait 100
end_while
set #StartX mousepos_x
set #StartY mousepos_y
set workwindow 0

while workwindow = 0
    set #handle getwindow (0)
    if  #handle != WindowHandle
        set windowpos -1 -1 -1 1 WindowHandle
    end_if
    if  #hint = 1
        hint (20 clRed 400 400 (Наведите курсор на ПРАВЫЙ НИЖНИЙ угол\nанализируемого объекта и нажмите Сtrl+A.))
    end_if
    wait 100
end_while
set #endX mousepos_x
set #endY mousepos_y
wait 100
hint (10 clblack 1920 0 (1))
set %a GetImage (#StartX #StartY #endX #endY)

set workwindow 0
while workwindow = 0
    set #handle getwindow (0)
    if  #handle != WindowHandle
        set windowpos -1 -1 -1 1 WindowHandle
    end_if
    if  #hint = 1
        hint (20 clRed 400 400 (Уберите курсор с объекта\nи нажмите Сtrl+A))
    end_if
    wait 100
end_while
hint (10 clblack 1920 0 (1))
set %b GetImage (#StartX #StartY #endX #endY)

set workwindow windowhandle
set #r %rgb [1 1]
set #g %rgb [1 2]
set #b %rgb [1 3]
writemem #b %a [1 1] b
writemem #g eval(%a [1 1] + 1) b
writemem #r eval(%a [1 1] + 2) b

set #delta %a [1 4] - (%a [1 4] - %a [1 2] * 3 + 1)
for #j 0 eval(%a [1 3] - 1)
    for #i 0 #delta 3
        set #z %a [1 1] + %a [1 4] * #j + #i
        set #z1 %a [1 1] + %a [1 4] * #j + #i + 1
        set #z2 %a [1 1] + %a [1 4] * #j + #i + 2
        readmem #b1 #z b
        readmem #g1 #z1 b
        readmem #r1 #z2 b

        set #z3 %b [1 1] + %b [1 4] * #j + #i
        set #z4 %b [1 1] + %b [1 4] * #j + #i + 1
        set #z5 %b [1 1] + %b [1 4] * #j + #i + 2
        readmem #b #z3 b
        readmem #g #z4 b
        readmem #r #z5 b
        gosub rgb

        if  #rmin > #r1 or #rmax < #r1 or #gmin > #g1 or #gmax < #g1 or #bmin > #b1 or #bmax < #b1
            set #rpaint %rgb [1 1]
            set #gpaint %rgb [1 2]
            set #bpaint %rgb [1 3]
            writemem #bpaint #z b
            writemem #gpaint #z1 b
            writemem #rpaint #z2 b
        end_if
    end_for
end_for
hint (20 clRed 500 500 (Картинка сохранена))
wait 1000
hint (10 clblack 1920 0 (1))
set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
end_script

:rgb
    set #rmin #r - 255 * #deviat / 100
    set #rmax #r + 255 * #deviat / 100
    set #gmin #g - 255 * #deviat / 100
    set #gmax #g + 255 * #deviat / 100
    set #bmin #b - 255 * #deviat / 100
    set #bmax #b + 255 * #deviat / 100

    set #dev 255 * #deviat / 100
    set #bmin #b - #dev
    set #bmax #b + #dev
    if  #bmax > 255
        set #bmax 255
    end_if
    if  #bmin < 0
        set #bmin 0
    end_if
    set #gmin #g - #dev
    set #gmax #g + #dev
    if  #gmax > 255
        set #gmax 255
    end_if
    if  #gmin < 0
        set  #gmin 0
    end_if
    set #rmin #r - #dev
    set #rmax #r + #dev
    if  #rmax > 255
        set #rmax 255
    end_if
    if  #rmin < 0
        set #rmin 0
    end_if
return

Часто кнопки подсвечиваются при наведении на них. Но несмотря на это, на них зачастую есть статичные цвета.
1. Запустить скрипт.
2. Ввести имя картинки.
3. Навести курсор на левый верхний угол кнопки, нажать Ctrl + A.
4. Навести курсор на правый нижний угол кнопки, нажать Ctrl + A.
5. Убрать курсор от кнопки, чтобы больше не подсвечивалась, нажать Ctrl + A.
6. Картинка сохранится в указанной папке. Все пиксели, которые меняются при наведении на кнопку, будут закрашены в цвет указанный в %rgb.
ВАЖНО!! Если была указана погрешность по цвету (переменная #deviat), то в Findimage также нужно указывать deviation.
https://youtu.be/ThnqLG-vmFc

Закрашивание фона
Код
    // Закрашивание фона
set %path [1] "C:\Users\abc\Desktop\11"     // путь для сохранения картинок, сохранятся с теми же именами что и были
set $path "C:\Users\abc\Desktop\33"     // путь к анализируемым картинкам
init_arr %rgb (1) 255 0 0          // цвет для закрашивания фона в формате RGB

    // <цвета фона в формате RGB или десятичном> [погрешность оттенка]
    // указывать можно любое количество цветов
init_arr %fon (1) 14597721 5     // 14597721 - десятичный цвет, 5 - погрешность оттенка  
init_arr %fon (2) 4071168         // погрешность можно не указывать, по умолчанию 0
init_arr %fon (3) 109 12 33 3    // 109 12 33 - цвет в формате RGB, 3 - погрешность оттенка
init_arr %fon (4) 131 110 146   // 109 12 33 - цвет в формате RGB, погрешность 0
//init_arr %fon (5)
//init_arr %fon (6)


    // остальное менять не нужно
for #i 1 size(%fon)
    if  %fon [#i 3] = ""
        set #colortmp %fon [#i 1]
        if  %fon [#i 2] != ""
            set %fon [#i 4] %fon [#i 2]
        end_if
        set #rgb colortorgb (#colortmp  %fon[#i])
    end_if
end_for

dir(%picture $path *.bmp*)
for #i 1 size(%picture)
    set %a [#i] Loadimage (%picture [#i 1])
end_for

set linedelay 0
set workwindow windowhandle

for #k 1 size(%a)
    set #delta %a [#k 4] - (%a [#k 4] - %a [#k 2] * 3 + 1)
    set #r %rgb [1 1]
    set #g %rgb [1 2]
    set #b %rgb [1 3]
    writemem #b %a [#k 1] b
    writemem #g eval(%a [#k 1] + 1) b
    writemem #r eval(%a [#k 1] + 2) b
    for #j 0 eval(%a [#k 3] - 1)
        for #i 0 #delta 3
            set #z3 %a [#k 1] + %a [#k 4] * #j + #i
            set #z4 %a [#k 1] + %a [#k 4] * #j + #i + 1
            set #z5 %a [#k 1] + %a [#k 4] * #j + #i + 2
            readmem #b #z3 b
            readmem #g #z4 b
            readmem #r #z5 b
            gosub rgb

            for #l 1 size(%fon)
                if  #rmin <= %fon [#l 1] and #rmax >= %fon [#l 1] and #gmin <= %fon [#l 2] and #gmax >= %fon [#l 2] and #bmin <= %fon [#l 3] and #bmax >= %fon [#l 3]
                    set #rpaint %rgb [1 1]
                    set #gpaint %rgb [1 2]
                    set #bpaint %rgb [1 3]
                    writemem #rpaint #z5 b
                    writemem #gpaint #z4 b
                    writemem #bpaint #z3 b
                    break
                end_if
            end_for
        end_for
    end_for
    set $bmp SaveImage (%a [#k 1] %path [1]\%picture [#k 3].bmp)
end_for

hint (20 clRed 500 500 (Картинки сохранены))
wait 1000
hint (10 clblack 1920 1 (1))
end_script

:rgb
    if  %fon [#l 4] = ""
        set #deviat 0
    else
        set #deviat %fon [#l 4]
    end_if
    set #rmin #r - 255 * #deviat / 100
    set #rmax #r + 255 * #deviat / 100
    set #gmin #g - 255 * #deviat / 100
    set #gmax #g + 255 * #deviat / 100
    set #bmin #b - 255 * #deviat / 100
    set #bmax #b + 255 * #deviat / 100

    set #dev 255 * #deviat / 100
    set #bmin #b - #dev
    set #bmax #b + #dev
    if  #bmax > 255
        set #bmax 255
    end_if
    if  #bmin < 0
        set #bmin 0
    end_if
    set #gmin #g - #dev
    set #gmax #g + #dev
    if  #gmax > 255
        set #gmax 255
    end_if
    if  #gmin < 0
        set  #gmin 0
    end_if
    set #rmin #r - #dev
    set #rmax #r + #dev
    if  #rmax > 255
        set #rmax 255
    end_if
    if  #rmin < 0
        set #rmin 0
    end_if
return

Скрипт позволяет закрасить не нужные пиксели (фон).

Поиск статичных точек на нескольких картинках
Код
   // Поиск статичных точек на нескольких картинках

set %path [1] "C:\Users\abc\Desktop"     // путь для сохранения готовой картинки
set $path "C:\Users\abc\Desktop\22"     // путь к анализируемым картинкам
init_arr %rgb (1) 255 0 0          // цвет для закрашивания фона в формате RGB
set #deviation 5                      // погрешность в цвете


    // остальное менять не нужно
set #deviat 255 * #deviation / 100
dir(%picture $path *.bmp*)

for #i 1 size(%picture)
    set %a [#i] Loadimage (%picture [#i 1])
end_for

set linedelay 0
set $imya prompt (Введите имя картинки)
set %imya [1] $imya

set workwindow windowhandle
set #r %rgb [1 1]
set #g %rgb [1 2]
set #b %rgb [1 3]
writemem #b %a [1 1] b
writemem #g eval(%a [1 1] + 1) b
writemem #r eval(%a [1 1] + 2) b


set #delta %a [1 4] - (%a [1 4] - %a [1 2] * 3 + 1)
for #j 0 eval(%a [1 3] - 1)
    for #i 0 #delta 3
        set size(%tmp)
        for #k 1 size(%a)
            set #z %a [1 1] + %a [1 4] * #j + #i
            set #z1 %a [1 1] + %a [1 4] * #j + #i + 1
            set #z2 %a [1 1] + %a [1 4] * #j + #i + 2
            readmem #b1 #z b
            readmem #g1 #z1 b
            readmem #r1 #z2 b

            set #z3 %a [#k 1] + %a [#k 4] * #j + #i
            set #z4 %a [#k 1] + %a [#k 4] * #j + #i + 1
            set #z5 %a [#k 1] + %a [#k 4] * #j + #i + 2
            readmem #b #z3 b
            readmem #g #z4 b
            readmem #r #z5 b
            gosub rgb
            init_arr %tmp (1 1 #k) #b #g #r
        end_for
        set delimiter ' + '
        set #meanb (%tmp [1]) / size(%tmp[])
        set #meang (%tmp [2]) / size(%tmp[])
        set #meanr (%tmp [3]) / size(%tmp[])
        set delimiter
        set #zb 0
        set #zg 0
        set #zr 0
        for #l 1 size(%tmp[])
            set #meanbmin #meanb - #deviat
            set #meanbmax #meanb + #deviat
            if  %tmp[1 #l] >= #meanbmin and %tmp[1 #l] <= #meanbmax
                set #zb #zb + 1
            end_if
            set #meangmin #meang - #deviat
            set #meangmax #meang + #deviat
            if  %tmp[2 #l] >= #meangmin and %tmp[2 #l] <= #meangmax
                set #zg #zg + 1
            end_if
            set #meanrmin #meanr - #deviat
            set #meanrmax #meanr + #deviat
            if  %tmp[3 #l] >= #meanrmin and %tmp[3 #l] <= #meanrmax
                set #zr #zr + 1
            end_if
        end_for
        if  #zb = size(%tmp[]) and #zg = size(%tmp[]) and #zr = size(%tmp[])
            set #rpaint #meanr
            set #gpaint #meang
            set #bpaint #meanb
            writemem #bpaint #z b
            writemem #gpaint #z1 b
            writemem #rpaint #z2 b
        else
            set #rpaint %rgb [1 1]
            set #gpaint %rgb [1 2]
            set #bpaint %rgb [1 3]
            writemem #bpaint #z b
            writemem #gpaint #z1 b
            writemem #rpaint #z2 b
        end_if
    end_for
end_for

hint (20 clRed 500 500 (Картинка сохранена))
wait 1000
hint (10 clblack 1920 1 (1))
set $bmp SaveImage (%a [1 1] %path [1]\%imya [1].bmp)
end_script

:rgb
    set #rmin #r - 255 * #deviat / 100
    set #rmax #r + 255 * #deviat / 100
    set #gmin #g - 255 * #deviat / 100
    set #gmax #g + 255 * #deviat / 100
    set #bmin #b - 255 * #deviat / 100
    set #bmax #b + 255 * #deviat / 100

    set #dev 255 * #deviat / 100
    set #bmin #b - #dev
    set #bmax #b + #dev
    if  #bmax > 255
        set #bmax 255
    end_if
    if  #bmin < 0
        set #bmin 0
    end_if
    set #gmin #g - #dev
    set #gmax #g + #dev
    if  #gmax > 255
        set #gmax 255
    end_if
    if  #gmin < 0
        set  #gmin 0
    end_if
    set #rmin #r - #dev
    set #rmax #r + #dev
    if  #rmax > 255
        set #rmax 255
    end_if
    if  #rmin < 0
        set #rmin 0
    end_if
return

Скрипт позволяет сравнить несколько картинок. Пиксели, которые присутствуют на всех картинках будет оставлены, остальные закрашены в цвет фона.
Сохраняется не оригинальная картинка, а среднее между всеми картинками.
Важно: Картинки должны быть одного размера.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 7.3.2025, 13:30
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.745
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29676
Пользователь №: 11.279



show your code


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Tonakag
сообщение 9.3.2025, 16:17
Сообщение #3


*

Registred
Сообщений: 5
Регистрация: 4.3.2025
Группа: Пользователи
Наличность: 0
Пользователь №: 20.924
Возраст: 20



Цитата(DarkMaster @ 7.3.2025, 13:30) *

show your code

Код

// Поиск числа с помощью FindImage
init_arr %GetImage (1) 0 0 245, 98      // координаты для поиска, StartX StartY EndX EndY

set linedelay 0
init_arr %picture 0 1 2 3 4 5 6 7 8 9     // имена картинок (0.bmp, 1.bmp и т. д.)
init_arr %symbol 0 1 2 3 4 5 6 7 8 9    // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0
set $path "C:\Users\Azwork\Downloads\uopilot242\img"                     // папка с картинками
set $bmp "*.bmp*"                           // формат картинок
set #deltaY 8                               // расстояние между строками (можно указать высоту картинок)
set #deltaspace 12                          // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 90                            // точность поиска для Findimage
set #deviation 3                            // погрешность оттенка  для Findimage
set #wait 2                                 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000                          // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка
set #repeatimage 2                          // допустимое смещение координат, если используется несколько видов одной картинки

dir (%path $path $bmp)
set delimiter '   '
while 1 = 1
    set size(%result)                        // уничтожить массив с предыдущими результатами
    set size(%coord)                         // уничтожить массив с предыдущими координатами
    call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage    // процедура поиска
//     save_array %result C:\Users\abc\Desktop\result111.txt     // массив с результатами поиска
//     save_array %coord C:\Users\abc\Desktop\coord111.txt     // массив с координатами чисел
    if  size(%result) > 0         // если размер массива больше 0
        // ТУТ НУЖНЫЕ ДЕЙСТВИЯ
        ///////////// для примера вывод в hint того что нашлось (можно убрать)
        set $str
        set %z [1] \n
        for #i 1 size(%result)
            set $str $str%result[#i]
            if  #i != size(%result)
                set $str $str%z [1]
            end_if
        end_for
        hint (14 clBlue 409, 265 ($str))
        /////////////
    else
        hint Картинки не найдены
    end_if
end_while

// процедура поиска и сортировки
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
    set #GetStartX %GetImage [1 1]
    set #GetStartY %GetImage [1 2]
    set #GetEndX %GetImage [1 3]
    set #GetEndY %GetImage [1 4]
    set #current_script current_script
    // загрузка картинок в память
    if  size(%path) > 0                  // если картинки найдены
        for #i 1 size(%path)
            for #j 1 size(%picture)
                if  %path [#i 3] = %picture [#j]
                    set #n #n + 1
                    set %image [#n] LoadImage(%path [#i 1])
                    set %number [#n] %symbol [#j]
                    break
                end_if
            end_for
        end_for
    else
        log Картинки в: $path   не найдены
        log Скрипт остановлен
        stop_script #current_script
    end_if
    // поиск картинок и их сортировка
    set size(%result1)
    set size(%coord_tmp)
    while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
        set #z 0
        set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY)      // сохранить часть экрана в память
        set #v %get [1 1]
        for #i 1 size(%number)
            set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)   // поиск
            if  #a < 0
                log Ошибка поиска картинки. Код ошибки: #a
                log Скрипт остановлен
                stop_script #current_script
            end_if
            if  #a > 0
                for #j 1 size(%a)
                    set #z #z + 1
                    init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2]   // запись результатов поиска в массив
                end_for
            end_if
            wait #wait
        end_for
        if  size(%result1) > 0
            gosub sortY        // сортировка по Y и X
        end_if
        set $b DeleteImage(%get[1 1])    // удалить изображение, полученное GetImage
    end_while
    goto end                 // выйти из процедуры

    :sortY
    ///// удаление повторных координат, если используется несколько видов одной картинки
        set #size 0
        set %tmp %result1
        set size(%result1)
        for #i 1 size(%tmp[1])
            set #break 0
            for #n 1 #size
                set #xrepeat %tmp[2 #i] - %result1[2 #n]
                set #yrepeat %tmp[3 #i] - %result1[3 #n]
                if  abs(#xrepeat) <= #repeatimage and abs(#yrepeat) <= #repeatimage
                    set #break 1
                    break
                end_if
            end_for
            if  #break = 0
                set #size #size + 1
                init_arr %result1 (1 1 #size) %tmp [1 #i]  %tmp [2 #i] %tmp [3 #i]
            end_if
        end_for
     ///////

        set #z 0
        set #z1 0
        set #z2 1
        set #z4 0
        sort_array %result1 -3
        while 1 = 1
            set #z 0
            set size(%tmp)
            for #i #z2 eval(size(%result1 [1]) - 1)
                set #j #i + 1
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) < #deltaY
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                else
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                    break
                end_if
            end_for
            set #z2 #z2 + #z
            if  #z2 = size(%result1[])
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) > #deltaY
                    set #jj #j
                    sort_array %tmp -2
                    set #z1 #z1 + 1
                    init_arr %result (#z1) %tmp [1]
                    set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
                    set %coord.#current_script [#z1] %tmp [2 #z], %tmp [3 #z]
                    gosub space
                    set size(%tmp)
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #jj]  %result1 [2 #jj] %result1 [3 #jj]
                    set #z1 #z1 + 1
                    set %result.#current_script [#z1] %tmp [1]
                    set %coord.#current_script [#z1] %tmp [2 #z], %tmp [3 #z]
                    gosub end
                end_if
                set #z #z + 1
                init_arr %tmp (1 1 #z) %result1 [1 #j]  %result1 [2 #j] %result1 [3 #j]
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
                gosub space
                break
            else
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
                gosub space
            end_if
        end_while
    return

    :space
        set #z3 0
        set size(%space)
        set #z4 #z4 + 1
        //посчитать где нужны пробелы
        for #i 1 eval(size(%tmp[]) - 1)
            set #j #i + 1
            set #space  %tmp [2 #i] - %tmp [2 #j]
            if  abs(#space) > #deltaspace
                set #z3 #z3 + 1
                set %space[#z3] #j
                set #size_coord 1
                while %coord_tmp[#z1 #size_coord] != ""
                    set #size_coord #size_coord + 1
                end_while
                set %coord_tmp [#z1 #size_coord] %tmp [2 #j], %tmp [3 #j]
            end_if
        end_for
        // вставить пробелы
        for #i 1 size(%space)
            set $str %result [#z4]
            set $str insert(" " $str %space[#i])
            set #j #i + 1
            set %space[#j] %space[#j] + #i
            set %result [#z4] $str
        end_for
        // сохранение массива в основном скрипте
        for #i 1 size(%result)
            set size(%tmp1)
            init_arr %tmp1 (1) %result [#i]
            for #j 1 size(%tmp1[1])
                set %result.#current_script [#i #j] %tmp1 [1 #j]
                set %coord.#current_script [#i #j] %coord_tmp [#i #j]
            end_for
        end_for
    return

    :end
end_proc


Сообщение отредактировал DarkMaster - 9.3.2025, 16:30
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
cirus   Создание картинки для FindImage скриптом   16.1.2017, 14:23
Cockney   В чем польза ? Согласно совету картинкам желательн...   16.1.2017, 15:22
cirus   Совет для поиска текста при меняющемся фоне. Иногд...   16.1.2017, 15:48
Cockney   И как его закрасить ? Как унифицировать процесс ? ...   16.1.2017, 23:28
cirus   Ничего универсального нет. Для большинства картино...   17.1.2017, 0:49
veiron   cirus, спасибо за скрипт   18.1.2017, 8:11
cirus   Добавил скрипт для поиска статичных точек на кнопк...   21.1.2017, 2:48
ivanTu   Подскажите пожалуйста, я подготовил картинку, а ка...   4.4.2017, 9:58
cirus   Цвет крайнего пикселя в левом верхнем углу изображ...   4.4.2017, 10:19
cirus   Добавил скрипт для закрашивания фона. Добавил скри...   9.4.2017, 21:06
Rey92   Добрый день. Не сохраняет картинки по Вашим скрипт...   6.11.2017, 13:44
cirus   Пилот запускать от администратора. Или указать дру...   6.11.2017, 13:57
Rey92   запуск есть другой пусть указывала на диске С все ...   6.11.2017, 14:15
cirus   Пилот версии 2.39? А просто скрин сохранит?: set %...   6.11.2017, 14:33
Rey92   да, пилот 2,39 по скрипту скрин сохранился.   23.2.2018, 17:21
cirus   Быстро вы ответили, почти 4 месяца прошло. Я уже з...   23.2.2018, 18:01
Rey92   )) ну пропаль я немного)) конкретно скрипт запуска...   23.2.2018, 22:53
cirus   Слежение надо выключить, оно сильно замедляет рабо...   23.2.2018, 23:26
Rey92   оо таки да - слежение надо было отключить))) Спаси...   23.2.2018, 23:43
NoName212   почему-то не получается обрезать картинку правому ...   9.3.2019, 3:14
cirus   Это баг, который Кнайт так и не исправил. В 2.39 б...   9.3.2019, 3:32
Tonakag   Это баг, который Кнайт так и не исправил. В 2.39 ...   4.3.2025, 19:10
DarkMaster   https://uopilot.uokit.com/repo.php   4.3.2025, 19:22
Tonakag   https://uopilot.uokit.com/repo.php idk why, thi...   5.3.2025, 1:06
DarkMaster   which one script do you try to use?   5.3.2025, 14:37
Tonakag   which one script do you try to use? https://fo...   6.3.2025, 4:25
DarkMaster   current topic have some scripts. now you send link...   6.3.2025, 16:17
Tonakag   current topic have some scripts. now you send lin...   7.3.2025, 4:46
DarkMaster   show your code   7.3.2025, 13:30


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.7.2025, 8:41
Designed by Nickostyle