매크로

질문
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
분류 제목 글쓴이 최근변경 추천
자유 오늘도 그냥 지나가기 심심해서 팁 하나 올려요. 이미... 2 swksd 2014.11.30 0/0
질문 변수에 관한 질문 5 파더 2014.11.30 0/0
질문 몬스터 길들이기 패치후에. 4 페르니코 2017.12.18 0/0
질문 스크립트 좀더 간략하게 작성방법이 있을까요. 8 우후훅 2014.12.04 0/0
정보 그리기 / DRAW / GDIP 화면에 선 도형 그리기 (예제) 3 따기따기 2014.12.12 0/0
질문 지니모션은 인터넷에 돌아다니는거아무거나사용해도되... 2 튀니지사람들 2014.12.02 0/0
질문 혹시 1004 매크로 1920 * 1080 해상도를 세나에 맞춰 ... 인사왕바이킹 2014.12.01 0/0
질문 어떤 이미지를 찾을때 같은 이미지가 있을때 대한 처리 7 프로구라머 2014.12.07 0/0
질문 리스트박스 관련질문 4 파더 2014.12.03 0/0
질문 체크박스 if 에대해서 6 파더 2014.12.04 0/0
질문 오토핫키 이미지서치좀 봐주세요ㅡ모비즌연동 8 뀨잉여기좋아 2014.12.05 0/0
자유 오토핫키컴파일 이후 Themida 패킹 사용하면되는건가요? 파더 2014.12.04 0/0
질문 숫자인식 소스 해석 부탁드립니다 1 notes5 2016.08.03 0/0
질문 1004매크로 1 dlalsrb86 2014.12.04 0/0
자유 아주 간단한건데.. 하면 이쁜 gui 색입히기... 2 로우얄 2017.12.19 0/0
질문 VMProtect Unpack 17 외치기 2017.03.19 0/0
질문 변수로 저장된 값마다 터치위치를 변경하고싶을때..어... 2 파더 2014.12.05 0/0
자유 아.. 이제 서서히 빛이 보이네요... 46 파더 2014.12.11 0/0
질문 오랜만의 질문 1 가지~!!! 20 파더 2014.12.08 0/0
질문 질문하나합니다.. 2 dsaf3 2014.12.10 0/0
Board Pagination Prev 1 ... 5678910111213 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글