매크로

질문
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
분류 제목 글쓴이 최근변경 추천
질문 bkvcqr 님 오토핫키 질문있습니다. [ ClassNN값 ] 3 최키라웃 2023.02.24 0/0
질문 이런거 짤려면 뭐 이용해야하나요?? skkcx 2023.02.24 0/0
질문 녹스 이미지서치 오류 때문에 여쭤봅니다! 12 a1237694 2023.02.24 0/0
질문 블루스택5 postmessage 성공하신분계신가요? 침묵의고요 2023.02.24 0/0
질문 하드인증 풀 수 있으신분 계신가요? 2 spuo 2023.02.24 0/0
질문 간단한 오토핫키 사용 질문입니다 1 그게그거 2023.02.24 0/0
질문 군주온라인 오토 구합니다~! 복덩대디 2022.05.16 0/0
질문 리니지 2.0 버젼 오토핫키 공부중입니다. 5 강냉이ekd 2023.03.06 0/0
질문 녹스 앱플레이어 프로세스 명 관련 앝텀 2023.02.24 0/0
질문 오토핫키 랜덤 실행 어떻게 할까요? 4 도지운 2023.02.24 0/0
질문 리스트뷰 저장관련 질문드립니다 2 바벌퀴레 2023.02.24 0/0
질문 메이플 해볼려고 하는데요 3 11도 2023.02.24 0/0
질문 선배님들 매크로를 처음 배워보려하는데요 6 자꾸만궁금해 2022.04.23 0/0
질문 와이로님의 오토핫키플러스는 더이상 구할 수 없는 건... 3 pimelo 2023.02.24 0/0
질문 매크로 입문을 이미지맥스로 하게 되었습니다.. 2 카스티 2022.03.15 0/0
질문 이미지서치 gosub 질문드립니다 4 어두운공간 2023.02.24 0/0
질문 이미지필터 문의드려요 은응 2023.02.24 0/0
질문 NGS 우회 컴파일 제작 가능하신분... 2 청년수현씨 2022.12.14 0/0
질문 이미지서치 반복문 줄이기 질문드립니다. 1 무쌍류 2023.02.24 0/0
질문 모바일 매크로 프로그램 macrorify 사용해보신분 있나요? 4 SinsaK 2022.02.19 0/0
Board Pagination Prev 1 2345678910 ... 172 Next
/ 172

전체 최신 인기글

전체 주간 인기글