매크로

질문
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
분류 제목 글쓴이 최근변경 추천
질문 한번더 문의드립니다 ㅠㅠ 7 야쿠르트 2015.05.23 0/0
질문 한글깨짐현상 질문있습니다. 14 서시 2015.02.08 0/0
질문 한가지만 더 여쭤보겠습니다. Form load 관련질문~ 1 다람쥐짱 2015.03.23 0/0
정보 한/영 전환 및 한글인지 영어인지 체크하는 방법 3 sistt 2017.04.08 1/0
질문 한 스크립트내에서 설정변경 방식에 대해 질문입니다. 4 류쿤 2015.06.02 0/0
질문 하드인증 풀어주실분 계실까요? 1 가마우징 2023.03.05 0/0
질문 하드인증 풀 수 있으신분 계신가요? 2 spuo 2023.02.24 0/0
질문 하드인증 푸는법도 있나요? 2 유비스 2017.09.11 0/0
질문 하드인증 푸는방법있나요? 14 매왕 2017.10.31 0/0
질문 하드인증 초보 도움좀 주세요 1 핫키쵝오 2021.03.29 0/0
질문 하드인증 우회(뚫는법) 질문이요 삐뻐 2017.08.15 0/0
질문 하드웨어 키입력 매크로사용할때 문제 2 응애제니 2023.10.18 0/0
질문 하드웨어 엔지엠 매크로에 디디32가 추가 되었습니다. 5 소심비형 2020.03.09 0/0
질문 하나의 키로 pause를 변수와 함께 토글 형식으로 사용 ... 3 인형 2015.06.12 0/0
정보 하나의 지정 픽셀로 마우스를 고정 압살맨블로그 2022.12.14 0/0
질문 하나의 구이버튼으로 일시정지/재시작 질문이요 4 공유야우 2017.12.31 0/0
자유 하.. 오토핫키 꽤어렵네요 호규흐규 2016.10.27 0/0
자유 하 오늘일과도 이제 끝났네요! 2 예지력1 2015.02.23 0/0
질문 픽셀이 여러게 서치됬는데 서치후 범위줄이는법알려주세요 1 요즘것들 2018.10.16 0/0
질문 픽셀서치후 클릭질문합니다 4 PlusK 2016.07.09 0/0
Board Pagination Prev 1 ... 5678910111213 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글