매크로

질문
2022.03.07 13:11

이미지필터 문의드려요

조회 수 177 추천 0 댓글 0


예전에 와이로님이 하시던 오토핫키+ 사용할 땐 내장이되어 편하게 사용했었는데


아무래도 오토핫키도 최신버전이 아닌경우에 호환이 안되는 문제들이 있어서


필터기능을 직접 구현하려고 하는데요


이미지 특정 색을 제외하거나 특정색만 색변경 필터 적용하여 이미지 서치를 하려고합니다.


혹시 관련 기능 코드 아시는 분 있을까요?


구글링한 경우로는 이미지 블러처리나 윤곽정도 입히는건 찾았는데


특정 색을 변환하는걸 못찾겠더라고요


참고할만한 자료나 의견 주시면 감사하겠습니다!


#SingleInstance Force

#include gdip_all.ahk  ;https://autohotkey.com/board/topic/29449-gdi-standard-library-145-by-tic/


srcImageFile = 1.png

outImageFile = 2.bmp


filter := [1,  1,  1

          ,1, -7,  1

          ,1,  1,  1]


gdipToken := Gdip_Startup()

if pBmpSrc := Gdip_CreateBitmapFromFile(srcImageFile)

{

  if pBmpOut := ImageFilterCore(pBmpSrc, filter)

    Gdip_SaveBitmapToFile(pBmpOut, outImageFile), Gdip_DisposeImage(pBmpOut)

  Gdip_DisposeImage(pBmpSrc)

}


Gdip_Shutdown(gdipToken)

MsgBox, 테스트완료

ExitApp


;filter = {w,h, factor, bias}

ImageFilterCore(pBitmap, filter)

{

  if !pBitmap or !IsObject(filter) or !filter.MaxIndex()

    return


  factor := filter.factor? filter.factor:1.0

  bias := filter.bias? filter.bias:0.0

  filterW := filter.w? filter.w: filter.h? filter.MaxIndex()//filter.h:Round(Sqrt(filter.MaxIndex()))

  filterH := filter.h? filter.h: filter.w? filter.MaxIndex()//filter.w:Round(Sqrt(filter.MaxIndex()))

  if (filterW * filterH > filter.MaxIndex())

    return


  imageW := Gdip_GetImageWidth(pBitmap)

  imageH := Gdip_GetImageHeight(pBitmap)

  if !imageW or !imageH

    return


  pBmpOut := Gdip_CreateBitmap(imageW, imageH)

  If Gdip_LockBits(pBitmap,0,0,imageW,imageH,StrideSrc,ScanSrc,DataSrc)

    return


  If Gdip_LockBits(pBmpOut,0,0,imageW,imageH,StrideOut,ScanOut,DataOut)

    return


  loop % imageW

  {

    x := A_Index - 1

    loop % imageH

    {

      y := A_Index - 1

      red := green := blue := 0.0

      loop % filterH

      {

        filterY := A_Index - 1

        loop % filterW

        {

          filterX := A_Index - 1

          

          imageX := Mod(x - filterW//2 + filterX + imageW, imageW)

          imageY := Mod(y - filterH//2 + filterY + imageH, imageH)

          Gdip_FromARGB( Gdip_GetLockBitPixel(ScanSrc, imageX, imageY,StrideSrc) , cA, cR, cG, cB)

          red += cR * filter[filterY * filterW + filterX + 1]

          green += cG * filter[filterY * filterW + filterX + 1]

          blue += cB * filter[filterY * filterW + filterX + 1]

        }

      }

      cR := factor * red + bias, cG := factor * green + bias, cB := factor * blue + bias

      cR := cR<0? 0: cR>255? 255: cR, cG := cG<0? 0: cG>255? 255: cG, cB := cB<0? 0: cB>255? 255: cB

      Gdip_SetLockBitPixel( Gdip_ToARGB(0, cR, cG, cB) ,ScanOut,X,Y,StrideOut)

    }

  }


  Gdip_UnlockBits(pBitmap,DataSrc)

  Gdip_UnlockBits(pBitmap,DataOut)

  return pBmpOut

}



List of Articles
분류 제목 글쓴이 최근변경 추천
질문 run명령어로 크롬 주소오픈할때요. 12 우후훅 2014.11.27 1/0
질문 비활성 이미지서치 클릭 관련 질문좀요. 5 파더 2014.11.27 0/0
자유 아래 제가 올린 함수 관련 샘플하나 올립니다. 4 모바게 2014.11.27 0/0
정보 타이머 샘플입니다. 3 모바게 2014.11.28 1/0
질문 ifinstring문 아시는지요. 특정단어유무검색요. 2 우후훅 2014.11.28 0/0
질문 매크로 실행시 gui에 ini를 어떻게 적용시키는지... 5 시에 2014.11.28 0/0
질문 오핫 고수님들 꼭봐주세요! 12 파더 2015.01.01 0/0
정보 List에 해당하는 GUI 팁 9 외치기 2015.08.24 2/0
질문 쫄작하는오핫만들려는데 도와주세요 6 호시히카리 2014.11.28 0/0
질문 GUI 체크박스 모두선택한번에 하는 방법이 궁금합니다. 3 우후훅 2014.11.28 0/0
질문 질문 질문 질문 질문 질문 문질 문질 문질 10 파더 2014.11.28 0/0
자유 세나 쫄작 소스공유합니다.(제약사항 많음) 18 swksd 2015.06.14 0/0
자유 파더님 3 외치기 2014.11.29 1/0
자유 비활성 클릭 좌표 테스트 샘플 (아래 제가 올린함수연관) 9 모바게 2018.01.03 0/0
질문 재시작후 설정 초기화 문제.. 5 파더 2014.11.29 0/0
자유 오토핫키 공부하시면서 가장 어려운 부분이 어떤점인가요? 19 외치기 2014.12.05 0/0
정보 제작지원도구 5 따기따기 2014.12.12 2/0
자유 오토핫키 공부에 조금이나마 도움이 되시라고 스크립트... 8 외치기 2015.08.24 2/0
질문 DropDownList의 리스트 부분이 조절 가능한가요? 6 시에 2015.02.25 0/0
질문 이미지서치 사진크기 달라도 찾을방법있나요? 7 Toon 2014.12.02 0/0
Board Pagination Prev 1 ... 5678910111213 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글