기존 픽셀서치 명령에 몇가지 유용한 옵션을 추가하였습니다.



PixelSearch , OutVarX, OutVarY, X1, Y1, X2, Y2, ColorID [, Variation, option, OutVarExceptColor]

 

[결과값]

ErrorLevel = 0 : 검색성공

ErrorLevel = 1 : 검색실패

ErrorLevel = 2 : 오류

 

[기존변수]
OutVarX, OutVarY : 검색성공시 픽셀 좌표

X1, Y1, X2, Y2, : 검색대상 영역 (*WH 옵션시 X2, Y2 값은 가로 및 세로 크기값)

ColorID : 검색할 컬러값 (기본 컬러 포맷은 GRB)

Variation : 컬러 공차값으로 0~255 사이의 숫자

 

[추가변수]

OutVarExceptColor : *Except 또는 *ExceptLine 옵션 사용시에만 유효한 변수이며 검색된 예외컬러가 존재하는 픽셀 좌표의 컬러값을 반환

 

[기존옵션 - 되도록 * 기호를 붙인 *Fast, *RGB 같은 사용 방식을 권장]
*Fast : 오토잇에서 업그레이드된 검색방식을 사용하기 위한 옵션
*RGB : 입력된 검색컬러를 RGB 컬러값으로 적용

 

[추가옵션 - 추가옵션 사용시 *Fast 옵션 자동 사용]
*WH : X2,Y2값을 가로 및 세로 사이즈 값으로 사용
*Scan(RB|BR|LT|TL|RT|TR|LB|BL) : 스캔방향 설정 (기본스캔방향은 RB)
*Except : 입력 컬러값을 제외한 컬러값이 존재하는 픽셀좌표 반환
*ExceptLine : 입력 컬러값이 존재하지 않는 스캔라인의 첫번째 픽셀좌표 반환
*Target(File|HBmp|HBmpNotDel)xx : 이미지서치 대상을 화면이 아닌 파일이나 HBITMAP 핸들로 사용
- 검색대상이 파일일때 < > 기호로 파일경로를 둘러싸 줄것 : *TargetFile<filePath>

 


 

*Scan 옵션에 대한 세부설명

 

이미지서치나 픽셀서치에서 *ScanXX 옵션으로 설정 가능하며 검색시작점과 검색방향의 우선순위를 지정하는데 사용합니다. 오토핫키의 기본 스캔방향은 왼쪽상단에서 오른쪽으로 그리고 아래로 진행하는 방식이며 *ScanRB 옵션과 같습니다.

 

아래 스샷의 스캔 진행방향은 1번이 선두 스캔방향이며 2번이 후순위 스캔방향입니다.

 

 


 

 

*Except 옵션

픽셀서치에서 *Except 옵션으로 설정 가능하며 Blue 컬러가 입력컬러인 경우 Blue 컬러를 제외한 다른 컬러값이 발견된 픽셀 좌표를 반환

- 위의 샘플픽셀배열에서 기본스캔방향일 경우 반환 좌표는 x=8 , y=0

 

*ExceptLine 옵션

픽셀서치에서 *ExceptLine 옵션으로 설정 가능하며 Blue 컬러가 입력컬러인 경우 Blue 컬러가 존재하지 않는 스캔라인의 첫번째 픽셀 좌표를 반환

- 위의 샘플픽셀배열에서 기본스캔방향일 경우 반환 좌표는 x=0 , y=1

 

 


 

 

Test.ahk 파일을 다운로드한  'Ahk+ 전용 AutoHotkey.exe 파일'  위에 드래그해서 실행하세요.

PixelSearch_Test(Search_ColorBlock).zip

 

 

이 스크립트는 특정컬러블럭(적색)의 좌상단 좌표를 모두 찾는 스크립트입니다.
화면검색용으로 바꾸시려면 PixelSearch 명령 라인의 *TargetFile<%searchFile%> 옵션을 전부 제거해 주시고 startx, starty, endx, endy 변수에 화면좌표를 설정해 주시면 됩니다.

 

 

 

 

 

<테스트 스크립트>

 

result := {}
searchColor := 0x241CED    ;찾을 컬러값 = 적색
searchFile = SearchTable.bmp
ImageGet,,,,,, searchFile,, imgSize   ;이미지사이즈 얻기

 

startx := 0
starty := 0
endx := imgSize.width-1
endy := imgSize.height-1

 

cury := starty
loop
{
  ;y축좌표가 범위를 벗어난 경우 루프 종료
  if (cury>endy)
    break
 
  curx := startx
  loop
  {
    ;검색할 컬러 찾기
    PixelSearch, sx,sy, curx,cury,endx,cury, searchColor,, *TargetFile<%searchFile%>
    if !ErrorLevel
    {
      ;윗픽셀과 같은색이 아닐경우 다른블럭으로 인식
      PixelGetColor, color, sx,sy-1, *TargetFile<%searchFile%>
      if (color<>searchColor)
      {
        obj := {x:sx, y:sy}
        result.Insert(obj)
      }
      curx := sx + 1
      cury := sy
      
      ;검색할 컬러 이외의 다른 컬러 찾기 (*Except 옵션)
      PixelSearch, sx,sy, curx,cury,endx,cury, searchColor,, *Except *TargetFile<%searchFile%>
      if !ErrorLevel
        curx := sx
      else
        break
    }
    else
      break
  }
  ++cury
}

 

;검색된 좌표목록 출력
text = 픽셀서치로 특정컬러블럭의 좌표 찾기 (여기서는 '적색' 블럭)`n`n
for k, v in result
  text .= k " : " v.x "," v.y "`n"
MsgBox,,, % text



Posted by 와이로
,