LearningNote
[오토핫키] 이미지 서치(3) 본문
이미지 서치에 대해 소개하면서,
컴퓨터마다, 그래픽 카드마다 이미지를 처리하는 방식이 다를 수 있으므로
이미지 서치는 안정적인 방식이 아니라고 말씀드렸습니다.
이점을 어느 정도는 보완할 수 있는 방법에 대해 알아보려고 합니다.
ImageSearch 마지막 인자인 ImageFile 에는
여러 옵션을 지정할 수 있습니다.
그중에서 가장 많이 쓰이는 두 가지 정도만 다루어 볼 예정입니다.
첫 번째는 이미지 전처리이며,
두 번째는 오차 범위입니다.
ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, *TransN *n ImageFile
문법에 유의하세요.
쉼표와 공백을 잘 구분하여 사용해야 합니다.
*TransN 옵션을 사용하면 이미지 안에서
화면 안의 어느 컬러에도 부합할 색상을 지정할 수 있습니다.
투명 구역이 있는 PNG, GIF, 그리고 TIF 파일을 찾는 데 자주 사용됩니다.
GIF 파일에 대하여, *TransWhite 면 대부분 작동할 것이며,
PNG와 TIF 파일에 대하여, *TransBlack 이 가장 적합합니다.
N 부분에 다른 어떤 칼라 이름 또는 RGB 값을 지정할 수 있습니다.
*n 옵션에는 0 부터 255 까지의 숫자를 지정하여
오차 허용 범위를 설정할 수 있습니다.
숫자가 작으면 엄격하게 찾는 것이고,
숫자가 높으면 느슨하게 검색합니다.
예를 들어, 아이유 사진을 검색한다고 하면,
숫자가 높을수록 신봉선도 아이유로 인식될 가능성이 높아집니다.
기본 값은 0 이며, 30 정도의 값을 지정할 것을 권장합니다.
값을 넣어 다시 한번 코드를 보여드리겠습니다.
!3::
CoordMode, Pixel, Relative
CoordMode, Mouse, Relative
ImageSearch, vX, vY, 0, 0, A_ScreenWidth, A_ScreenHeight, *TransBlack *30 ./image1.png
return
이번에는 이미지 서치가 제대로 이루어졌는지를
알 수 있는 방법에 대해 배워보겠습니다.
ErrorLevel 이라고 하는 내장 변수가 있습니다.
ImageSearch 를 비롯하여 몇몇 명령어가 실행된 후에는
자동으로 ErrorLevel 변수에 값이 들어갑니다.
ImageSearch 의 경우에는,
ErrorLevel 에 0, 1, 2 의 값 중 하나가 들어갑니다.
각각의 값이 어떤 경우에 들어가는지에 대해 설명드리겠습니다.
0: 지정한 영역 내에서 정상적으로 이미지를 찾은 경우
1: 지정한 영역 내에서 이미지를 발견하지 못한 경우
2: 오류로 인해 이미지를 서치를 수행하지 못한 경우
ErrorLevel 이 2 인 경우에는, 주로 해당 이미지 파일이 지정된 경로에 없어서 발생하는 경우가 많습니다. 이 점 주의하세요.
이렇게 내장 변수를 제공해주기 때문에
좀 더 완성도 있는 프로그램을 만들 수 있어졌습니다.
이미지 서치에 성공한 경우에는 그 위치를 클릭하고,
실패한 경우에는 그에 알맞은 오류 메시지를 띄우도록
코드를 작성해보세요.
힌트는 조건문 if 입니다.
!4::
CoordMode, Pixel, Relative
CoordMode, Mouse, Relative
ImageSearch, vX, vY, 0, 0, A_ScreenWidth, A_ScreenHeight, *TransBlack *30 ./image1.png
if (ErrorLevel == 0)
{
Click, %vX%, %vY%, 1
}
else if (ErrorLevel == 1)
{
MsgBox, 이미지를 찾지 못했습니다.
}
else if (ErrorLevel == 2)
{
MsgBox, 오류가 발생하여 이미지 서치를 수행하지 못했습니다. 이미지 파일의 경로를 확인해주세요.
}
return
이미지 서치에 관해 좀 더 자세히 알고 싶으신 분은
다음의 링크를 살펴보시기 바랍니다.
autohotkeykr.sourceforge.net/docs/commands/ImageSearch.htm
지금까지 했던 이미지 서치의 전체 코드를 다시 한번 보면서
복습하시기 바랍니다.
#SingleInstance, Force
F4::
ExitApp
!1::
ImageSearch, vX, vY, 0, 0, 1600, 1200, ./image1.png
Click, %vX%, %vY%, 1
return
!2::
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
ImageSearch, vX, vY, 0, 0, A_ScreenWidth, A_ScreenHeight, ./image1.png
Click, %vX%, %vY%, 2
return
!3::
CoordMode, Pixel, Relative
CoordMode, Mouse, Relative
ImageSearch, vX, vY, 0, 0, A_ScreenWidth, A_ScreenHeight, *TransBlack *30 ./image1.png
return
!4::
CoordMode, Pixel, Relative
CoordMode, Mouse, Relative
ImageSearch, vX, vY, 0, 0, A_ScreenWidth, A_ScreenHeight, *TransBlack *30 ./image1.png
if (ErrorLevel == 0)
{
Click, %vX%, %vY%, 1
}
else if (ErrorLevel == 1)
{
MsgBox, 이미지를 찾지 못했습니다.
}
else if (ErrorLevel == 2)
{
MsgBox, 오류가 발생하여 이미지 서치를 수행하지 못했습니다. 이미지 파일의 경로를 확인해주세요.
}
return
'오토핫키' 카테고리의 다른 글
[오토핫키] 함수(2) (0) | 2020.08.13 |
---|---|
[오토핫키] 함수(1) (0) | 2020.07.24 |
[오토핫키] 이미지 서치(2) (0) | 2020.07.20 |
[오토핫키] 이미지 서치(1) (0) | 2020.07.16 |
[오토핫키] 반복문(2) (0) | 2020.07.13 |