Застрял на коде с этой библиотекой
#GDIPLUS_OK = 0
Enumeration
#RotateNoneFlipNone
#Rotate90FlipNone
#Rotate180FlipNone
#Rotate270FlipNone
#RotateNoneFlipX
#Rotate90FlipX
#Rotate180FlipX
#Rotate270FlipX
#RotateNoneFlipY = #Rotate180FlipX
#Rotate90FlipY = #Rotate270FlipX
#Rotate180FlipY = #RotateNoneFlipX
#Rotate270FlipY = #Rotate90FlipX
#RotateNoneFlipXY = #Rotate180FlipNone
#Rotate90FlipXY = #Rotate270FlipNone
#Rotate180FlipXY = #RotateNoneFlipNone
#Rotate270FlipXY = #Rotate90FlipNone
EndEnumeration
Enumeration
#EncoderParameterValueTypeByte = 1
#EncoderParameterValueTypeASCII = 2
#EncoderParameterValueTypeShort = 3
#EncoderParameterValueTypeLong = 4
#EncoderParameterValueTypeRational = 5
#EncoderParameterValueTypeLongRange = 6
#EncoderParameterValueTypeUndefined = 7
#EncoderParameterValueTypeRationalRange = 8
#EncoderParameterValueTypePointer = 9
EndEnumeration
;-Structures.
Structure GdiplusStartupInput
GdiPlusVersion.l
*DebugEventCallback.DebugEventProc
SuppressBackgroundThread.l
SuppressExternalCodecs.l
EndStructure
;The following two structures are used for setting encoder parameters (in our case the 'quality' parameter).
Structure EncoderParameter
guid.GUID
NumberOfValues.l
Type.l
Value.l
EndStructure
Structure EncoderParameters
Count.i
Parameter.EncoderParameter[1]
EndStructure
;-Imports.
Import "gdiplus.lib"
GdiplusStartup(token, *input.GdiplusStartupInput, output)
GdiplusShutdown(token)
GdipLoadImageFromFile(*filename, *bitmap)
GdipImageRotateFlip(image, rotateFlipType)
GdipSaveImageToFile(image, filename.p-unicode, *clsidEncoder.CLSID, *encoderParams)
GdipDisposeImage(image)
GdipGetAllPropertyItems(*image, totalBufferSize.l, numProperties.l, ai);ai is *allItems.PropertyItem
GdipGetPropertySize(*image, totalBufferSize.i, numProperties.i)
EndImport
sourceFile$="d:\gdi+\photo_2025-02-18_14-38-49.jpg"
;Protected input.GdiplusStartupInput, encParams.EncoderParameters
input.GdiplusStartupInput\GdiPlusVersion = 1
GdiplusStartup(@token, @input, #Null)
;Was the initialisation successful?
If token
If GdipLoadImageFromFile(@sourceFile$, @image) = #GDIPLUS_OK
rr=GdipGetPropertySize(@image, @totalBufferSize, @numProperties)
Debug rr
rr=gdipGetAllPropertyItems(@image,@sz,@np,*m)
GdipDisposeImage(image)
EndIf
; ;Tidy up.
GdiplusShutdown(token)
EndIf
DataSection
;CLSID for the gdi+ jpeg encoder.
clsid_jpeg:
Data.l $557CF401
Data.w $1A04, $11D3
Data.b $9A, $73, $00, $00, $F8, $1E, $F3, $2E
;CLSID for the relevant gdi+ encoder parameter.
clsid_EncoderQuality:
Data.l $1D5BE4B5
Data.w $FA4A, $452D
Data.b $9C, $DD, $5D, $B3, $51, $05, $E7, $EB
EndDataSection
GdipGetPropertySize возвращает значение или 2 или 4 и дальше не работает. Хотелось бы знать, в чем причина.