이미지에 필터효과를 적용하기 위해 추가한 명령어입니다.



ImageFilter, FilterName, hBmpOutVar, hBmpIn [, X1, Y1, X2, Y2, option]


[결과값]

ErrorLevel = 0 : 명령어 정상 실행

ErrorLevel = 1 : 명령어 실행 오류

ErrorLevel = 2 : 필터명 오류 또는 해당필터의 필수옵션 누락

 

[필터이름 및 전용옵션]

Gray : 그레이 필터

Edge : 엣지 필터

Sharpen : 샤픈 필터

EdgeSharpen : 엣지샤픈 필터

Emboss : 엠보싱 필터

Blur : 블러 필터

MotionBlur : 모션블러 필터

Threshold : 임계값을 기준으로 흑백이미지를 만듭니다.

*ThresholdNN : 임계값, 미지정시 적정 임계값 자동지정, NN=0~255

AdaptThreshold : 적응형 임계필터로 흑백이미지를 만듭니다.

*AdaptRectNN : NN값은 양의정수로 픽셀별 적응면적 설정

*AdaptCaseNN : NN값이 양수일때는 흰색영역이 음수일때는 검은색영역이 증가

BoundaryFill : 시작픽셀과 인접한 시작픽셀과 같은색상을 가진 모든픽셀을 지정한 색상으로 교체합니다.

*xNN,*yNN : 시작픽셀 좌표(필수옵션)

*FillColorNN : 새로 칠할 RGB 컬러값(필수옵션)

ex) *FillColorWhite *FillColor0xFFFFFF

*BoundaryColorNN: 경계선 컬러값, 이 옵션 존재시 경계선을 찾아 내부컬러 교체

*NearVariation : 시작픽셀이 아닌 확장중인 픽셀끼리 비교하여 공차값 적용(object 속성일때 형식 NearVariation:true)

*NN : 색상비교 공차값, NN=0~255(object 속성일때 형식 variation:NN)

BoundaryClean : 검색컬러로 이루어진 인접픽셀군의 크기가 지정된 크기 이하일 경우 새로운 컬러값으로 교체합니다.

*SearchColorNN : RGB 검색컬러(필수옵션)

ex) *SearchColorWhite *SearchColor0xFFFFFF

*FillColorNN : 새로 칠할 RGB 컬러값(필수옵션)

ex) *FillColorWhite *FillColor0xFFFFFF

*SizeMaxNN : NN값은 양수이며 해당 크기 이하의 검색컬러로 이루어진 픽셀군을 찾음(필수옵션)

*UseBoundaryColor : 검색컬러를 경계선 컬러값으로 사용한다는 의미(object 속성일때 형식 UseBoundaryColor:true)

*NN : 색상비교 공차값, NN=0~255(object 속성일때 형식 variation:NN)


[공통옵션]

*WH : X2, Y2를 가로 세로값(픽셀수)으로 사용합니다.

*HBmpNotDel : 기본적으로 명령어 수행 후 hBmpIn 핸들이 소멸하지만, 이 옵션 사용시 핸들이 유지 됩니다.

*AreaCut : X1, Y1, X2, Y2 필터효과 적용범위가 지정된 경우 해당영역의 이미지만 잘라서 출력됩니다.


[사용예]
ex1) 단일필터 개별 적용
CoordMode, Pixel, Screen
ImageGet, hBitmap, 0,0,500,500  ;스크린좌표기준 캡쳐
ImageFilter, Edge, hBitmap, hBitmap
ImageFilter, Gray, hBitmap, hBitmap
SaveHBITMAPToFile(hBitmap, "_filterTest.bmp")
DllCall("DeleteObject", "UPtr",hBitmap)

SaveHBITMAPToFile(hBitmap, sFile)
{
  VarSetCapacity(DIBSECTION, A_PtrSize=8? 104:84, 0)
  NumPut(40, DIBSECTION, A_PtrSize=8? 32:24,"UInt") ;dsBmih.biSize
  DllCall("GetObject", "UPTR", hBitmap, "int", A_PtrSize=8? 104:84, "UPTR", &DIBSECTION)
  hFile:= DllCall("CreateFile", "UPTR", &sFile, "Uint", 0x40000000, "Uint", 0, "Uint", 0, "Uint", 2, "Uint", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "int64P", 0x4D42|14+40+(biSizeImage:=NumGet(DIBSECTION, A_PtrSize=8? 52:44, "UInt"))<<16, "Uint", 6, "UintP", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "int64P", 54<<32, "Uint", 8, "UintP", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "UPTR", &DIBSECTION + (A_PtrSize=8? 32:24), "Uint", 40, "UintP", 0, "Uint", 0)
  DllCall("WriteFile", "UPTR", hFile, "Uint", NumGet(DIBSECTION, A_PtrSize=8? 24:20, "UPtr"), "Uint", biSizeImage, "UintP", 0, "Uint", 0)
  DllCall("CloseHandle", "UPTR", hFile)
}

ex2) 배열을 이용한 복수필터 적용
   filterList := [ {filter:"Sharpen"}, {filter:"Gray"}, {filter:"AdaptThreshold", AdaptRect:7, AdaptCase:3} ]

   ImageFilter, % filterList, hBitmap, hBitmap

[테스트 스크립트]

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

이미지필터_테스트1.zip




Posted by 와이로
,