카테고리 없음

녹스 흑백화후 이미지파일을 저장하려하는데 제대로 되지않습니다

시스이 2018. 7. 2. 14:15
#Include,Gdip.ahk 

F1::
WinGet,hwnd,ID,NoxPlayer
pToken:=Gdip_Startup()
;핸들(캡쳐할 원도우 핸들)

;Gdip_Shutdown(gdipToken)
Bitmap := Gdip_BitmapFromHwnd(hwnd)

;비트맵을 h비트맵으로
HBitmap := Gdip_CreateHBITMAPFromBitmap(Bitmap, Background=0xffffffff)
Gdip_DisposeImage(Bitmap)

;h비트맵을 h비트맵 그레이스케일로
Gray := GDI_GrayscaleBitmap(HBitmap)
Gdip_DisposeImage(HBitmap)

;h비트맵을 비트맵으로
Bitmap := Gdip_CreateBitmapFromHBITMAP(Gray)
Gdip_DisposeImage(Gray)

msgbox,%Bitmap%
;이 구간에서 비트맵 활용하면 됨, 아래는 파일로 저장하는 예시
Gdip_SaveBitmapToFile(Bitmap, "sFilepng")
;Gdip_DisposeImage(Bitmap)
;Gdip_Shutdown(pToken)
return

F2::
exitapp

GDI_GrayscaleBitmap( hBM ) { ; Converts GDI bitmap to 256 color GreyScale

; www.autohotkey.com/community/viewtopic.php?t=88996 By SKAN, Created : 19-Jul-2012

Static RGBQUAD256 ;



If ! VarSetCapacity( RGBQUAD256 ) {

VarSetCapacity( RGBQUAD256, 256*4, 0 ), Color := 0

Loop 255

Numput( Color := Color + 0x010101, RGBQUAD256, A_Index*4, "UInt" )

}



VarSetCapacity( BM,24,0 ), DllCall( "GetObject", UInt,hBM, UInt,24, UInt,&BM )

W := NumGet( BM,4 ), H := NumGet( BM,8 )

hdcSrc := DllCall( "CreateCompatibleDC", UInt,0 )

hbmPrS := DllCall( "SelectObject", UInt,hdcSrc, UInt,hBM )



dBM := DllCall( "CopyImage", UInt

, DllCall( "CreateBitmap", Int,2, Int,2, UInt,1, UInt,8, UInt,0 )

, UInt,0, Int,W, Int,H, UInt,0x2008, UInt )



hdcDst := DllCall( "CreateCompatibleDC", UInt,0 )

hbmPrD := DllCall( "SelectObject", UInt,hdcDst, UInt,dBM )

DllCall( "SetDIBColorTable", UInt,hdcDst, UInt,0, UInt,256, UInt,&RGBQUAD256 )



DllCall( "BitBlt", UInt,hdcDst, Int,0, Int,0, Int,W, Int,H

, UInt,hdcSrc, Int,0, Int,0, UInt,0x00CC0020 )



DllCall( "SelectObject", UInt,hdcSrc, UInt,hbmPrS )

DllCall( "DeleteDC", UInt,hdcSrc )

DllCall( "SelectObject", UInt,hdcSrc, UInt,hbmPrD )

DllCall( "DeleteDC", UInt,hdcDst )



Return dBM

}

위에는 사용한 스크립트입니다.
흑백화를 한후 이미지를 저장해서 확인해 보려는데 저장파일이 어딜봐도 보이질 않습니다.
그리고 Gdip_SaveBitmapToFile의 저장경로를 알고싶습니다.해당 스크립트의 문제점을 알려주세요.

답글