I modified the algo to this form but it still won't change the compression ratio. I wondered if I am using the correct GUID
CLSID_EncoderQuality GUID <01d5be4b5h,0fa4ah,0452dh,<09ch,0ddh,05dh,0b3h,051h,005h,0e7h,0ebh>>
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
encoder STRUCT QWORD
count dq ? ; = 1
pguid dq ? ; = pointer to CLSID_EncoderQuality
nmval dq ? ; = 1 NumberOfValues
dwtyp dq ? ; = 4 (EncoderParameterValueTypeLong)
qlevl dq ? ; = pointer to Image_Quality
encoder ENDS
.data
CLSID_ImageType GUID <0557CF401h,01A04h,011D3h,<09Ah,073h,000h,000h,0F8h,01Eh,0F3h,02Eh>>
CLSID_EncoderQuality GUID <01d5be4b5h,0fa4ah,0452dh,<09ch,0ddh,05dh,0b3h,051h,005h,0e7h,0ebh>>
.code
; -----------------------------------------------------------
SaveJpgQualityImage proc hBMP:QWORD,pFilename:QWORD,Image_Quality:QWORD
LOCAL hGdip :QWORD
LOCAL pTemp :QWORD
LOCAL pqual :QWORD
LOCAL ptype :QWORD
LOCAL penc :QWORD
LOCAL iqual :QWORD
LOCAL encd :encoder
mov ptype, ptr$(CLSID_ImageType)
mov pqual, ptr$(CLSID_EncoderQuality)
mov iqual, ptr$(Image_Quality)
mov encd.count, 1 ; count
mrm encd.pguid, pqual ; pointer to CLSID_EncoderQuality
mov encd.nmval, 1 ; NumberOfValues
mov encd.dwtyp, 4 ; EncoderParameterValueTypeLong
mrm encd.qlevl, iqual ; JPG qlevl
mov penc, ptr$(encd.count)
invoke GdipCreateBitmapFromHBITMAP,hBMP,0,ptr$(hGdip) ; OK
invoke GdipSaveImageToFile,hGdip,L(pFilename),ptype,penc ; last arg does not work
invoke GdipDisposeImage,hGdip
ret
SaveJpgQualityImage endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤