IS_ex5_ready.zip



/*

##############################################

ImageSearch 연습 5 여러번 찾기 버그 수정


- 테스트 방법

  image1.bmp 를 그림판으로 여러개 열고 스크립트를 실행

  

  

- 목표

  화면에서 이미지 찾은곳을 제외하고, 찾지 않은 곳에서 다시 이미지 검색

  빼먹는 영역 없이 한번씩만 찾도록 한다.

  

- 동작 방식

   찾으려는 영역을 제대로 설정해주기위해서 Gdip.ahk 를 include 하였다.

   이미지 처리 관련 라이브러리로 image1.bmp 의 가로, 세로 pixel 사이즈를 얻어와서

   image_w, image_h 에 설정한다.

   

   이미지를 찾으면, 찾은 위치 오른쪽 부터 다시 검색, 

   못찾으면 찾은위치 아래줄 왼쪽부터 다시 검색한다.

###############################################

*/




#SingleInstance, Force 

#noenv

#include Gdip.ahk


SetWorkingDir, %A_ScriptDir%   ;스크립트가 있는 폴더를 실행폴더로 설정합니다.

                               ;image파일 이름만 있는경우, 현재 실행 폴더에서 이미지 파일을 찾습니다.


coordmode pixel,screen  ; imageSearch시 좌표는 전체 화면에서의 좌표.

coordmode tooltip,screen ; tooltip 을 보여줄때 좌표는 전체 화면에서의 좌표


startX=0

starty=0

endX:=A_ScreenWidth

endY:=A_ScreenHeight


File_Image1 = image1.bmp

FoundImageCount=0

f_getImageSize( A_ScriptDir "\" File_Image1,image_w,image_h) ; 전달하는 이미지파일의 가로 세로 크기를 얻어온다.

            


sx:=startX

sy:=starty

ex:=endX

ey:=endY

state=0 ; 발견하면 1로 설정하고,

        ; 1 이면 오른쪽 남은 부분 검색

        ; 1 일때 검색 실패하면, 0 으로 변경하고 그 아래줄 왼쪽처음부터 검색

        ; tx,ty에서 발견시 두부분 추가 검색 

        ;  1. ( tx+1,ty)~ (ex,ty)  ; 오른쪽 한줄만 검색

        ;  0. (0,ty+1)~(ex,ey);    ; 그다음줄은 첨부터 다시 검색


loop

{

    ; 좌표값을 변경하기위해서 변수 sx,sy,ex,ey로 좌표값 표현.

    ImageSearch, foundX,foundY,%sx%,%sy%,%ex%,%eY%,%File_Image1%

    if errorlevel = 0

    {

        tooltip,%A_Index% [x:%foundX%] [y:%foundY%] 찾았다.!!,foundX,foundY

        msgbox %A_Index% 찾았다!!! [x:%foundX%] [y:%foundY%] tooltip 보세요.

        FoundImageCount++

        ; 이미지 찾았을 경우 다음 시작위치를 찾은 위치 오른쪽 부터 이미지 사이즈 만큼 높이로 설정

        ; state를 1로 변경, 다시 찾기 수행하도록함.

        sx:=foundx+1

        sy:=foundy

        ey:=foundy+image_h

        state:=1

        continue

    }

    else if ErrorLevel = 2 

    {

        MsgBox imageSearch를 수행 할 수 없습니다.

        break

    }

    else if ErrorLevel = 1

    {

        if(state == 1) ; 오른쪽 찾기 state에서 이미지를 못 찾았음. 다음줄 왼쪽 처음부터 찾기 시작하도록 좌표 설정, state 0으로 변경

        {

            sx := startX

            sy := sy+1

            ey := endy

            state := 0

            continue

        }

        MsgBox %FoundImageCount% 개의 이미지를 찾았습니다.

        break

    }

}


return


f_getImageSize(imagefile="", Byref width=0,Byref height=0){

    GDIPToken := Gdip_Startup()                                     

    pBM := Gdip_CreateBitmapFromFile( imagefile )                 

    Width:= Gdip_GetImageWidth( pBM )

    height:= Gdip_GetImageHeight( pBM )   

    Gdip_DisposeImage( pBM )                                          

    Gdip_Shutdown( GDIPToken )                                        

}







반응형

'Autohotkey > AutoHotKey강좌' 카테고리의 다른 글

ImageSearch 예제 6 trans 투명  (0) 2016.05.30
ImageSearch 예제 4 여러번 찾기 - 버그  (0) 2016.05.27
ImageSearch 예제3 정확도  (0) 2016.05.25

+ Recent posts