본문 바로가기

IT 컴퓨터/프로그래밍

오토핫키 강좌2 (ImageSearch, 이미지서치)

오토핫키 강좌2 (ImageSearch, 이미지서치)


오토핫키에서 손에 꼽을 정도로 많이 사용하는 기능이라고 생각하는 이미지서치 기능을 알아겠습니다. 

https://autohotkey.com/docs/commands/ImageSearch.htm


1. 이미지 서치란?

> 화면에서 지정한 이미지를 검색해서 찾아줌


2. 기본 폼(사용형태)

ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile


3. 매개변수(parameter) 설명

OutputVarX / OutputVarY

- 찾은 이미지의 X,Y 값을 반환해 줌 (제일 왼쪽상단좌표)

- 일치하는 항목이 없으면 값은 비어있음

- CoordMode를 사용하지 않으면 좌표가 활성창에 상대적

이부분은 추후 CoordMode에서 상세 설명

- 하나 또는 둘모두 공백이 될 수 있음

이 경우 ErrorLevel을 사용하여 일치여부를 판별가능함


*ErrorLevel : 이미지 검색결과에 대해 알려주는 역활을 합니다.

이미지 찾음

 0

 이미지 못찾음

 1

 이미지에 문제 발생(경로, 확장자 등)

 2



X1, Y1

- 검색 할 사각형의 왼쪽 위 모서리 좌표 

- CoordMode를  사용하지 않으면 활성창에 상대적


X2, Y2

- 검색 할 사각형의 오른 쪽 아래 모서리 좌표

- CoordMode를 사용하지 않으면 활성창에 상대적


ImageFile

- 이미지 경로를 지정하지 않은 경우 오토핫키 파일과 동일한곳(% A_WorkingDir %)에 있다고 가정

- 지원 이미지 : GIF, JPG, BMP, ICO, CUR, PNG, TIF, Exif, WMF 등등..

- 그외 옵션정보들이 있으나 이부분은 심화파트에서 다룰 예정



*활성창 : 현재 제일앞에 떠있는 화면을 말합니다. 


4. 실제구현

계산기에 원하는 값이 써있을 경우 MsgBox로 Success띄우고 아니면 Fail띄우기


해당 소스(예제파일이미지서치 예제.zip


*예제파일은 윈도우10에서 계산기를 대상으로 만든 부분이라 사용환경에 따라서 안될수가 있습니다. 그러니 소스만 참조 하시고 대상이 되는 이미지, 좌표등은 수정 해주세요.

---------------------------------------------------

F5::

ImageSearch, FoundX, FoundY, 0,0, 327, 498, targetimage.png


if ErrorLevel = 0

MsgBox, Success

else if ErrorLevel = 1

MsgBox, Fail

else if ErrorLevel = 2

Msgbox, program Error

return

---------------------------------------------------

FoundX, FoundY > 성공한 경우 찾은 위치 좌표

0,0 > 찾을 이미지의 좌측상단 좌표

327, 498 > 찾을 이미지의 우측하단좌표

targetimage.png > 찾을 이미지


* 대상이 될 이미지의 좌측상단과 우측하단(파란점, 빨간점)


여기서 2번째 드는 의문이 좌표 겠죠?

오토핫키가 설치된 곳에서 window Spy라는 프로그램을 띄우시거나,

아래처럼 오토핫키를 실행한후 window Spy를 켜면 됩니다.


기존 hello world파일이나, 예제파일 실행 후 윈도우스파이 실행



이게 윈도우 스파이 화면입니다. 여기서 보실게 노란색표시란건 딱봐도 아시겠죠 ?

찾을 대상이 될곳에 마우스를 가져다 둔 후 relative(활성창)에 쓰인 X,Y값을 넣으면 됩니다.

*  absoulte는 절대좌표로 활성창에 상관없이 변하지 않는 좌표를 말합니다. 


if ErrorLevel = 0 이라고 되어 있고 뒤에도 else if라고 되어 있는데 

이 부분은 프로그램에서 쓰이는 용어로 조건문 이라고 합니다. 

우선은 ErrorLevel에 따라 동작을 구분지어주는 코드 정도로 생각하시면 됩니다.

(조건문은 다른 블로그들을 통해 학습하세요!)


"ErrorLevel=0 이면 success 하고,

ErrorLevel=1이면 fail을 띄우고 마지막으로 2가 되면 프로그램 에러 문구를 띄워라"

*ErrorLevel은 본문중 [OutputVarX / OutputVarY] 파라메터 설명아래에 있으니 기억이 안나면 참조하세요.


5. 요약

요약하면 내가 저장한 이미지가 있는지, 없는지알려주는 기능이미지 서치입니다. ErrorLevel을 통해 이미지의 상태(찾음,못찾음,다른문제발생)를 알수 있고, 

OutputVarX, OutputVarY로 찾은 이미지의 좌측상단 좌표값을 가지고 옵니다.


실제로 이미지서치는 초반에 간단한 메크로를 만들때 활용도가 높습니다. 

예를 들면 게임에서 30% 남은 HP를 저장하고,

이미지서치기능을 활용하여 피가 30% 남았을때 피를 채우도록 할수가 있겠네요.


그럼 기초강좌라 여기에서 끝마치겠습니다. 

도움이 됐길.