매크로

질문
2022.03.07 13:11

이미지필터 문의드려요

조회 수 198 추천 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
분류 제목 글쓴이 최근변경 추천
질문 이미지서치후 클릭 밑에 이미지서치후 클릭 반복 하고... 16 바유무 2015.07.22 0/0
질문 이미지서치후 해당좌표까지이동할때쓰는 함수뭐가있을... 2 감사합니당ㅋㅋ 2023.04.09 0/0
질문 이미지서치후에 2 셋쇼마루 2016.05.31 0/0
질문 이미지서칭 시간함수 질문 12 마토깽 2015.06.07 0/0
질문 이미지서칭 자꾸 안되서 질문드립니다 2 골골라굴 2016.10.04 0/0
질문 이미지써치 질문있습니다 5 태희씽 2015.02.07 0/0
질문 이미지써치를 한후에 써칭한 곳에 마우스클릭하는 질문... 2 짱용호짱짱 2022.12.14 0/0
질문 이미지에서 숫자 찾아서 순서대로 입력 어떻게 할까요.. 3 nada30 2019.10.28 0/0
자유 이미지질문 1 PlusK 2017.11.30 0/0
정보 이미지파일 세밀하게 캡쳐하기 12 부비수달 2017.08.13 0/0
질문 이미지파일내의 모든 색상을 분류하는 방법이나 함수같... 2 유니윤 2019.09.23 0/0
질문 이미지파일도 이미지 서치할수있나요? 혹 아시는 명령... 5 리사심슨 2015.07.20 0/0
질문 이미지파일에서 이미지 인식하는 방법 질문드립니다 17 Hangoon 2015.02.10 1/0
질문 이미지필터 문의드려요 은응 2023.02.24 0/0
질문 이미지합치기 질문드립니다 1 푸리푸은 2020.08.01 0/0
자유 이미지흰색 빨강으로 바꾸기 성공했네요 (슉슉이님감사) 제발등업좀2 2016.06.19 0/0
질문 이미치서치 질문좀 드리겠습니다. 8 낭군이 2015.04.11 0/0
자유 이번 리니지m 매크로 단속에 대하여 11 죠케빈 2017.07.31 0/0
질문 이번에 모모에서 LD로 넘어가려는데 오토핫키 그대로 ... TPLife 2020.04.05 0/0
질문 이쁘게 gui 짜시는분들은 뭘 이용하시나요? 1 난느려 2017.02.28 0/0
Board Pagination Prev 1 ... 170171172173174175176177178 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글