Made the code into module format, works fine.
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
SaveImgAsJpg proc BmpHndl:QWORD,filename:QWORD,quality:QWORD
LOCAL pImage :QWORD
; ------------------------------------------------------------------------
.data?
QualityLevel@@@@@@@@ dd ? ; mangle to avoid accidental duplicates
.data
CLSID_ImageType1 GUID <0557CF401h,01A04h,011D3h,<09Ah,073h,000h, \
000h,0F8h,01Eh,0F3h,02Eh>> ; JPG image type
JPG_EncoderParameters dd 1 ; Number of parameters in this structure
dd 0 ; alignment !
CLSID_EncoderQuality GUID <01d5be4b5h,0fa4ah,0452dh,<09ch,0ddh, \
05dh,0b3h,051h,005h,0e7h,0ebh>>
dd 1 ; Number of the parameter values
dd 4 ; ValueTypeLong
JpgQualityParameterPTR dq offset QualityLevel@@@@@@@@
.code
; ------------------------------------------------------------------------
cmp quality, 100
ja default
jmp next
default:
mov quality, 75 ; default for quality error
next:
rcall GdipCreateBitmapFromHBITMAP,BmpHndl,0,ptr$(pImage) ; convert BMP handle
mov rax, quality ; set the quality level
mov QualityLevel@@@@@@@@, eax ; 100 = highest, 0 = lowest
invoke GdipSaveImageToFile,pImage,L(filename), \
ADDR CLSID_ImageType1,ADDR JPG_EncoderParameters ; write JPG image to file
rcall GdipDisposeImage,pImage ; delete GDIP handle
ret
SaveImgAsJpg endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
I should mangle all of the names to ensure no accidents.