<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=14439&amp;type=atom" />
	<updated>2020-12-06T05:38:26Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=14439</id>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143918#p143918" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong>&nbsp; &nbsp;Прошу пардона, не почтите за примитивную лесть и попытку манипуляции, примите моё глубочайшее уважение и искренние восхищения недостижимостью Вашего интеллекта! Меня интересует вопрос того, как, основываясь на приведенном примере,&nbsp; вычленить найденные координаты Уолли на вокзале и кликнуть на его местоположение? Признаюсь, реализация принципов нейронной сети на языке АНК - это достойно необычайного уважения. Ах, если бы кто то более умный и тщеславный научил бы тому, как из вышеизложенного организовать функцию, в которую передавались бы имена базового и искомого файлов изображений, область координат поиска и процент совпадения, исходя из которого, функция выдавала бы правду или ложь.</p>]]></content>
			<author>
				<name><![CDATA[pixel75]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=41268</uri>
			</author>
			<updated>2020-12-06T05:38:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143918#p143918</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130745#p130745" />
			<content type="html"><![CDATA[<p>Вроде перенёс этот пример на автохотки.<br /><a href="https://www.autoitscript.com/forum/topic/160732-opencv-udf/?page=2&amp;tab=comments#comment-1280955">https://www.autoitscript.com/forum/topi … nt-1280955</a><br /></p><div class="codebox"><pre><code>;start dll opencv
h1 := DllCall(&quot;LoadLibrary&quot;, &quot;Str&quot;, &quot;opencv_core2413.dll&quot;, &quot;Ptr&quot;)
h2 := DllCall(&quot;LoadLibrary&quot;, &quot;Str&quot;, &quot;opencv_highgui2413.dll&quot;, &quot;Ptr&quot;)
h3 := DllCall(&quot;LoadLibrary&quot;, &quot;Str&quot;, &quot;opencv_imgproc2413.dll&quot;, &quot;Ptr&quot;)

file1 := &quot;1.jpg&quot;
file2 := &quot;2.jpg&quot;
window := &quot;gui&quot;

;// load IPL type image both images must have same number of bits and color channels!
pimg := DllCall(&quot;opencv_highgui2413.dll\cvLoadImage&quot;, &quot;AStr&quot;, file1, &quot;int&quot;, CV_LOAD_IMAGE_COLOR := 1, &quot;Cdecl Int&quot;)
ptemp := DllCall(&quot;opencv_highgui2413.dll\cvLoadImage&quot;, &quot;AStr&quot;, file2, &quot;int&quot;, CV_LOAD_IMAGE_COLOR := 1, &quot;Cdecl Int&quot;)

;// Create some windows to show the input
;// and output images in.
;//
DllCall(&quot;opencv_highgui2413.dll\cvNamedWindow&quot;, &quot;AStr&quot;, window, &quot;int&quot;, CV_WINDOW_AUTOSIZE := 0x00000001, &quot;Cdecl Int&quot;)

;// show our input image
;//
DllCall(&quot;opencv_highgui2413.dll\cvShowImage&quot;, &quot;AStr&quot;, window, &quot;ptr&quot;, pimg, &quot;Cdecl&quot;)

;// Determine images height and width to create results matrix
WidthHeight := DllCall(&quot;opencv_core2413.dll\cvGetSize&quot;, &quot;ptr&quot;, pimg, &quot;Cdecl int64&quot;)
width := 0xFFFFFFFF &amp; WidthHeight
height := WidthHeight &gt;&gt; 32
WidthHeight := DllCall(&quot;opencv_core2413.dll\cvGetSize&quot;, &quot;ptr&quot;, ptemp, &quot;Cdecl int64&quot;)
width2 := 0xFFFFFFFF &amp; WidthHeight
height2 := WidthHeight &gt;&gt; 32
rw :=  width - width2 + 1
rh :=  height - height2 + 1

;// Create Opencv matrix object 32 bit floating
presult := DllCall(&quot;opencv_core2413.dll\cvCreateMat&quot;, &quot;int&quot;, rh, &quot;int&quot;, rw, &quot;int&quot;, CV_32FC1 := 5, &quot;Cdecl ptr&quot;)

;// Template matching
DllCall(&quot;opencv_imgproc2413.dll\cvMatchTemplate&quot;, &quot;ptr&quot;, pimg, &quot;ptr&quot;, ptemp, &quot;ptr&quot;, presult, &quot;int&quot;, CV_TM_CCOEFF_NORMED := 5, &quot;Cdecl&quot;)
DllCall(&quot;opencv_core2413.dll\cvNormalize&quot;, &quot;ptr&quot;, presult, &quot;ptr&quot;, presult, &quot;Double&quot;, 0, &quot;Double&quot;, CV_C := 1, &quot;int&quot;, CV_MINMAX := 32, &quot;ptr&quot;, 0, &quot;Cdecl&quot;)
DllCall(&quot;opencv_imgproc2413.dll\cvThreshold&quot;, &quot;ptr&quot;, presult, &quot;ptr&quot;, presult, &quot;Double&quot;, thresh := 0.9, &quot;Double&quot;, maxval := 1, &quot;int&quot;, CV_THRESH_BINARY := 0, &quot;Cdecl double&quot;)

;//locate matches
;
;// Create minmax variables to pass to opencv
VarSetCapacity(pmaxloc, 8, 0)
VarSetCapacity(pminloc, 8, 0)
VarSetCapacity(pmaxval, 8, 0)
VarSetCapacity(pminval, 8, 0)

;// create mask to find multiple matches
pmask := DllCall(&quot;opencv_core2413.dll\cvCreateImage&quot;, &quot;int&quot;, rw, &quot;int&quot;, rh, &quot;int&quot;, IPL_DEPTH_8U := 8, &quot;int&quot;, channels := 1, &quot;Cdecl ptr&quot;)
DllCall(&quot;opencv_core2413.dll\cvSet&quot;, &quot;ptr&quot;, pmask, &quot;double&quot;, 1, &quot;double&quot;, 1, &quot;double&quot;, 1, &quot;double&quot;, 1, &quot;ptr&quot;, 0, &quot;Cdecl&quot;)

;// Find location of maximum
DllCall(&quot;opencv_core2413.dll\cvMinMaxLoc&quot;, &quot;ptr&quot;, presult, &quot;ptr&quot;, &amp;pminval, &quot;ptr&quot;, &amp;pmaxval, &quot;ptr&quot;, &amp;pminloc, &quot;ptr&quot;, &amp;pmaxloc, &quot;ptr&quot;, pmask, &quot;Cdecl&quot;)

loop
{
   ;// Mask it to find others if exists and draw red rectangle on input image
   DllCall(&quot;opencv_core2413.dll\cvRectangle&quot;, &quot;ptr&quot;, pmask, &quot;int&quot;, NumGet(pmaxloc, 0, &quot;int&quot;)-5, &quot;int&quot;, NumGet(pmaxloc, 4, &quot;int&quot;)-5, &quot;int&quot;, NumGet(pmaxloc, 0, &quot;int&quot;)+ width2, &quot;int&quot;, NumGet(pmaxloc, 4, &quot;int&quot;)+height2, &quot;double&quot;, 0, &quot;double&quot;, 0, &quot;double&quot;, 0, &quot;double&quot;, 0, &quot;int&quot;, -1, &quot;int&quot;, 8, &quot;int&quot;, 0, &quot;Cdecl&quot;)
   DllCall(&quot;opencv_core2413.dll\cvRectangle&quot;, &quot;ptr&quot;, pimg, &quot;int&quot;, NumGet(pmaxloc, 0, &quot;int&quot;)-5, &quot;int&quot;, NumGet(pmaxloc, 4, &quot;int&quot;)-5, &quot;int&quot;, NumGet(pmaxloc, 0, &quot;int&quot;)+ width2+10, &quot;int&quot;, NumGet(pmaxloc, 4, &quot;int&quot;)+height2+10, &quot;double&quot;, 0, &quot;double&quot;, 0, &quot;double&quot;, 255, &quot;double&quot;, 0, &quot;int&quot;, 2, &quot;int&quot;, 8, &quot;int&quot;, 0, &quot;Cdecl&quot;)

   ;// Update input image
   DllCall(&quot;opencv_highgui2413.dll\cvShowImage&quot;, &quot;AStr&quot;, window, &quot;ptr&quot;, pimg, &quot;Cdecl&quot;)

   ;// Find location of maximum
   DllCall(&quot;opencv_core2413.dll\cvMinMaxLoc&quot;, &quot;ptr&quot;, presult, &quot;ptr&quot;, &amp;pminval, &quot;ptr&quot;, &amp;pmaxval, &quot;ptr&quot;, &amp;pminloc, &quot;ptr&quot;, &amp;pmaxloc, &quot;ptr&quot;, pmask, &quot;Cdecl&quot;)
   if (NumGet(pmaxval, 0, &quot;double&quot;) &lt; 0.99)
      break
   sleep 1000
}
msgbox done
DllCall(&quot;opencv_core2413.dll\cvReleaseImage&quot;, &quot;ptr*&quot;, pmask, &quot;Cdecl&quot;)
DllCall(&quot;opencv_core2413.dll\cvReleaseMat&quot;, &quot;ptr*&quot;, presult, &quot;Cdecl&quot;)
DllCall(&quot;opencv_core2413.dll\cvReleaseImage&quot;, &quot;ptr*&quot;, ptemp, &quot;Cdecl&quot;)
DllCall(&quot;opencv_core2413.dll\cvReleaseImage&quot;, &quot;ptr*&quot;, pimg, &quot;Cdecl&quot;)
DllCall(&quot;opencv_highgui2413.dll\cvDestroyAllWindows&quot;, &quot;Cdecl&quot;)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2018-12-30T14:24:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130745#p130745</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130652#p130652" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>romzes96 пишет:</cite><blockquote><p>Есть ли на AHK OpenCV или его аналог?</p></blockquote></div><p>На ahk нету, зато есть на ближайшем аналоге - AutoIt.<br />Если есть желание можете попробовать перенести и поделиться.<br /><a href="https://www.autoitscript.com/forum/topic/160732-opencv-udf/?page=2&amp;tab=comments#comment-1280955">https://www.autoitscript.com/forum/topi … nt-1280955</a><br /><a href="https://www.autoitscript.com/forum/topic/186963-simple-automation-using-opencvs-match-feature">https://www.autoitscript.com/forum/topi … ch-feature</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2018-12-27T12:50:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130652#p130652</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130645#p130645" />
			<content type="html"><![CDATA[<p><strong>stealzy</strong>, Спасибо большое понял как пользоваться FindText(). Это прекрасно!</p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-27T07:11:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130645#p130645</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130640#p130640" />
			<content type="html"><![CDATA[<p>Нюанс в производительности: встроенная команда PixelSearch будет искать долго и не годится. А дело в том, что под капотом она состоит из двух операций - взятия буфера экрана (что занимает существенное время в десятки мс), и только затем взятия пикселя оттуда (практически мгновенно).<br />Правильно будет взять буфер только первый один раз а потом доставать из него любые отдельные пиксели. Для этого используются готовые функции.<br />Тема эта поднималась на форуме множество раз и я многим уже отвечал подробно, уверен при желании вы все найдете.<br />Ну и FindText() хорош по скорости. Применял оба подхода для одной игры.<br />Но до создания вариативной ImageSearch я не дошел <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />Если почитать справку, то в ImageSearch уже есть параметр вариации, указывается так:<br />ImageSearch, FoundX, FoundY, 40,40, 300, 300, *14 C:\My Images\test.bmp<br />14 - число вариативности, от 0 до 255. По умолчанию 0.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-12-26T22:38:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130640#p130640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130631#p130631" />
			<content type="html"><![CDATA[<p>Ну вот еще 1 костыль под вечер... Мда. Стыдно, но потом переделаю.</p><p>Функция которая сграбит 16 цветов. Начиная с левого верха.</p><p>Код:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>MgetFbitmap()
	{
		global
		MouseGetPos, mX, mY
		mX--
		mY--
		start_point = mX
		PixelGetColor, color1p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color2p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color3p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color4p, %mX%, %mY%, RGB
		mY++
		mX = start_point
		PixelGetColor, color5p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color6p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color7p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color8p, %mX%, %mY%, RGB
		mY++
		mX = start_point
		PixelGetColor, color9p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color10p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color11p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color12p, %mX%, %mY%, RGB
		mY++
		mX = start_point
		PixelGetColor, color13p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color14p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color15p, %mX%, %mY%, RGB
		mX++
		PixelGetColor, color16p, %mX%, %mY%, RGB
		Return, color1p color2p color3p color4p color5p color6p color7p color8p color9p color10p color11p color12p color13p color14p color15p color16p
	}</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-26T19:49:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130631#p130631</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130630#p130630" />
			<content type="html"><![CDATA[<p>Вот по такому принципу. Хм кажется не плохо.<br />Как на скриншоте.<br />Опечатка на скрине <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-26T19:30:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130630#p130630</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130628#p130628" />
			<content type="html"><![CDATA[<p>Вот как-то сообразил некий bitmap на костылях. 2x2 пикселя. Лучше всего составить 4x4. Но таким методом это не правильно.<br />Кто-нибудь может помочь с данной функцией? А то в данном варианте очень много &quot;регрессии&quot; кода. Буду очень признателен за помощь. Будет некий bitmap. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> </p><p>Функция:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>get_bitmap(searchAreaX, searchAreaY, searchAreaX2, searchAreaY2, color1p, color2p, color3p, color4p, variation)
	{
		global
		;MsgBox, %searchAreaX% %searchAreaY% %searchAreaX2% %searchAreaY2% %color1p% %color2p% %color3p% %color4p% %variation%
		PixelSearch, bit1X, bit1Y, %searchAreaX%, %searchAreaY%, %searchAreaX2%, %searchAreaY2%, %color1p%, %variation%, Fast RGB ;Ищем 1 цвет. 
		If !ErrorLevel
		{
			result1 = 1 ;Если нашли ищем цвет правее от первого.
			bit1X++
			PixelSearch, bit2X, bit2Y, %bit1X%, %bit1Y%, %searchAreaX2%, %searchAreaY2%, %color2p%, %variation%, Fast RGB
			If !ErrorLevel
			{
				result2 = 1 ;Если нашли ищем цвет ниже второго.
				bit1Y++
				PixelSearch, bit3X, bit3Y, %bit1X%, %bit1Y%, %searchAreaX2%, %searchAreaY2%, %color3p%, %variation%, Fast RGB
				If !ErrorLevel
				{
					result3 = 1 ;Если нашли ищем цвет ниже второго.
					bit1X--
					PixelSearch, bit4X, bit4Y, %bit1X%, %bit1Y%, %searchAreaX2%, %searchAreaY2%, %color4p%, %variation%, Fast RGB
					If !ErrorLevel
					{
						result4 = 1 ;Если нашли 4 пиксель то финиш.
						Return, bit1X bit1Y
					}
					else
					{
						ToolTip, BitMap Работает не правильно. Не нашел 4 пиксель.
						Sleep, 500
						ToolTip
					}
				}
				else
				{
					ToolTip, BitMap Работает не правильно. Не нашел 3 пиксель.
					Sleep, 500
					ToolTip
				}
			}
			else
			{
				ToolTip, BitMap Работает не правильно. Не нашел 2 пиксель.
				Sleep, 500
				ToolTip
			}
		}
		else
		{
			ToolTip, BitMap Работает не правильно. Не нашел 1 пиксель.
			Sleep, 500
			ToolTip
		}
		If (result1 == result2 == result3 == result4)
		{
			Return, bit1X bit1Y
		}
	}</code></pre></div></div></div><p>Есть еще мысля сделать так что бы можно было выбрать мышкой область и если область превышает 4x4 то в центре этой области мы получаем 16 соседних цветов. И пишем их в файл. А то так очень не удобно. 2x2 не удобно в ручную цвета выбирать. А 4x4 вообще невообразимо нудно и долго. Хм или даже проще. Тыкаем в центральный пиксель и от него получаем массив пикселей 4x4. Но массив в AHK для меня тема тяжелая, поэтому просто получаем 4x4 от выбранного/центрального пикселя. За это возьмусь завтра наверно. Сейчас хотел бы как-то привести код в порядок оптимизировать его для того что бы можно было ввести не 4 цвета, а 16. Если кто знает пишите буду рад!</p><p>P.s. Конечно можно и так костылить, но будет очень громоздко.</p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-26T18:49:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130628#p130628</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130622#p130622" />
			<content type="html"><![CDATA[<p><strong>stealzy</strong> Спасибо с этим обязательно ознакомлюсь. Но пока что всё получается с точным сравнение с картинкой.<br />Не мог ли бы помочь с новым вопросом? А именно:</p><p>Я пишу скрипт для POE (Path Of Exile). Хочу написать точнее. Скрипт просто должен перекладывать всю валюту из инвентаря в тайник.<br />В процессе создания скрипта возникла проблема с моим пониманием ImageSearch.</p><p>Сам скрипт:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
SetBatchLines, -1
CoordMode, Pixel, Window
#If WinActive(&quot;ahk_class POEWindowClass&quot;)
;++++++++++++++++++++++++++++Переменные++++++++++++++++++++++++++++
{
	ivent_boxX:= A_ScreenWidth//1.51181102362 ;1270
	ivent_boxY:= A_ScreenHeight//1.84300341297 ;586
	ivent_boxX2:= A_ScreenWidth//1.00840336134 ;1904
	ivent_boxY2:= A_ScreenHeight//1.2676056338 ;852
	Item_list = Item_1,Item_2,Item_3
}
;++++++++++++++++++++++++++++Функции++++++++++++++++++++++++++++++
{
	pic_found(searchAreaX, searchAreaY, searchAreaX2, searchAreaY2, pic_name) ;поиск картинок
	{
		global
		ImageSearch, picX, picY, %searchAreaX%, %searchAreaY%, %searchAreaX2%, %searchAreaY2%, %A_ScriptDir%\%pic_name%.png
		;MsgBox, %searchAreaX% %searchAreaY% %searchAreaX2% %searchAreaY2% %A_ScriptDir%\%pic_name%.png
		Return, picX picY
	}
	move_item()
	{
		Send, {Ctrl Down}
		Send, {LButton}
		Send, {Ctrl Up}
	}
	item_found(searchAreaX, searchAreaY, searchAreaX2, searchAreaY2, pic_name)
	{
		global
		ImageSearch, itemX, itemY, %searchAreaX%, %searchAreaY%, %searchAreaX2%, %searchAreaY2%, %A_ScriptDir%\Item\%pic_name%.png
		Return, itemX itemY
	}
}
;++++++++++++++++++++++++++++Бинды++++++++++++++++++++++++++++++++
*~RButton::
{
	Send, {sc11}
	Send, {sc12}
	Send, {sc2}
	Send, {sc3}
	Send, {sc4}
	Send, {sc5}
	Send, {sc6}
	GetKeyState, state, RButton, P
	if state = D
		KeyWait, RButton, Up
}
Return

*~PrintScreen::
Sleep, 1000
MouseClickDrag, Left, %ivent_boxX%, %ivent_boxY%, %ivent_boxX2%, %ivent_boxY2% , 0 ; Передвижение мыши
Return

F4::
ExitApp
Return


sc3B:: ;F1
CLEAR_INVENRATY: ;Перекладываем все сферы свитки и точку в с][рон...
pic_found(0, 0, A_ScreenWidth, A_ScreenHeight, &quot;Inventary_detected&quot;)
If !ErrorLevel
{	
	while(A_Index &lt; 26)
	{
		item_found(ivent_boxX, ivent_boxY, ivent_boxX2, ivent_boxY2, &quot;Image_&quot;A_Index)
		If !ErrorLevel
		{
			MouseMove, %itemX%, %itemY%
			move_item()
		}
		else
		{
			
		}
	}
}
else
{
	ToolTip, Инвентарь закрыт!
	Sleep, 500
	ToolTip
}
Return</code></pre></div></div></div><p>Скрипт перекладывает 26 видов валют которые определены маленькими картинками.<br />Вот так выглядит инвентарь:<br /><a href="http://prntscr.com/lzrkyg">http://prntscr.com/lzrkyg</a><br />Вот так я взял &#039;индификатор&#039; каждой валюты, и это рабочий вариант:<br /><a href="http://prntscr.com/lzrn4w">http://prntscr.com/lzrn4w</a></p><p>Сделал 26 маленьких картинок которые затем идут в ImageSearch и ищутся ТОЛЬКО в зоне инвентаря.<br />Но столкнулся с проблемой. ImageSearch/скрипт всё делает правильно только в том случае если валюта в инвентаре лежит в том же порядке как на первом скриншоте. А по идее он должен брать их и в обратном порядке, и не зависимо от места нахождения в инвентаре. Но в порядке валютной иерархии то есть от полезной к бесполезной.</p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-26T15:22:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130622#p130622</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130611#p130611" />
			<content type="html"><![CDATA[<p>На оф.форуме есть тема FindText(), поиск идет по форме одноцветной(+/-) части изображения.<br />Вызывать функции библиотек OpenCV из ahk можно с помощью DllCall().</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-12-26T13:20:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130611#p130611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130567#p130567" />
			<content type="html"><![CDATA[<p>Появился другой вопрос.<br />Есть ли на AHK OpenCV или его аналог?<br />Хотелось бы производить поиск по изображению, но не по 100% сходству. Это возможно?</p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-25T08:42:40Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130567#p130567</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130566#p130566" />
			<content type="html"><![CDATA[<p>Всем спасибо! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Нашел в чём была проблем. pic_name надо было взять в &quot;&quot;. А именно Inventary_detected.</p><p>То есть так <strong>не</strong> правильно:<br />pic_found(0, 0, 1920, 1080, Inventary_detected)<br />А так <strong>правильно</strong>:<br />pic_found(0, 0, A_ScreenWidth, A_ScreenHeight, &quot;Inventary_detected&quot;)</p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-25T07:19:59Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130566#p130566</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[ImageSearh через функцию, не через GoSub. Пишу для POE.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=130561#p130561" />
			<content type="html"><![CDATA[<p>Здравствуйте не подскажите почему этот код всегда выдает False?<br />Почему-то в виде самопальной функции поиск выдает всегда 0.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>;++++++++++++++++++++++++++++Функции++++++++++++++++++++++++++++++
{
	pic_found(searchAreaX, searchAreaY, searchAreaX2, searchAreaY2, pic_name) ;поиск картинок
	{
		global
		ImageSearch, picX, picY, %searchAreaX%, %searchAreaY%, %searchAreaX2%, %searchAreaY2%, %A_ScriptDir%\%pic_name%.png
		Return, picX picY
	}
}
sc3B:: ;F1
CLEAR_INVENRATY: ;Перекладываем все сферы свитки и точку в с][рон...
pic_found(0, 0, 1920, 1080, Inventary_detected)
;ImageSearch, picX, picY, 0, 0, 1920, 1080, %A_ScriptDir%\Inventary_detected.png
If !ErrorLevel
{
		ToolTip, Инвентарь открыт!
		Sleep, 500
		ToolTip
	}
	else
	{
		ToolTip, Инвентарь закрыт!
		Sleep, 500
		ToolTip
	}
Return</code></pre></div></div></div><p>Но вот так всё работает исправно, и поиск находит картинку.<br /><strong>Внимание строка закомментирована.</strong></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>;++++++++++++++++++++++++++++Функции++++++++++++++++++++++++++++++
{
	pic_found(searchAreaX, searchAreaY, searchAreaX2, searchAreaY2, pic_name) ;поиск картинок
	{
		global
		ImageSearch, picX, picY, %searchAreaX%, %searchAreaY%, %searchAreaX2%, %searchAreaY2%, %A_ScriptDir%\%pic_name%.png
		Return, picX picY
	}
}
sc3B:: ;F1
CLEAR_INVENRATY: ;Перекладываем все сферы свитки и точку в с][рон...
;pic_found(0, 0, 1920, 1080, Inventary_detected)
ImageSearch, picX, picY, 0, 0, 1920, 1080, %A_ScriptDir%\Inventary_detected.png
If !ErrorLevel
{
		ToolTip, Инвентарь открыт!
		Sleep, 500
		ToolTip
	}
	else
	{
		ToolTip, Инвентарь закрыт!
		Sleep, 500
		ToolTip
	}
Return</code></pre></div></div></div><p>Скорее вопрос в том как правильно разместить ErrorLeval что бы он выходил в глобал(?)<br />Просто первый раз творю тут через функции <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[romzes96]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=38749</uri>
			</author>
			<updated>2018-12-24T18:29:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=130561#p130561</id>
		</entry>
</feed>
