Создание картинки для 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/c6GsCBNcT401. Запустить скрипт.
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
Скрипт позволяет сравнить несколько картинок. Пиксели, которые присутствуют на всех картинках будет оставлены, остальные закрашены в цвет фона.
Сохраняется не оригинальная картинка, а среднее между всеми картинками.
Важно: Картинки должны быть одного размера.