
Why size of this librarie is so big? If exist another Userlibrary,dll, command line program or ..... to convert from bmp to jpeg with less size please presentation it.
Code: Select all
#GDIPLUS_OK = 0
;-Structures.
Structure GdiplusStartupInput ;{
GdiPlusVersion.l
*DebugEventCallback.DebugEventProc
SuppressBackgroundThread.l
SuppressExternalCodecs.l
EndStructure
;-Imports.
Import "gdiplus.lib"
GdiplusStartup(token, *input.GdiplusStartupInput, output)
GdiplusShutdown(token)
GdipCreateBitmapFromFile(filename.p-unicode, *bitmap)
GdipSaveImageToFile(image, filename.p-unicode, *clsidEncoder.CLSID, *encoderParams)
GdipDisposeImage(image)
EndImport
;First initialise gdi+.
input.GdiplusStartupInput
input\GdiPlusVersion = 1
GdiplusStartup(@token, @input, #Null)
;Was the initialisation successful?
If token
If GdipCreateBitmapFromFile("test.bmp", @image) = #GDIPLUS_OK
GdipSaveImageToFile(image, "test.jpg", ?clsid_jpeg, 0)
GdipDisposeImage(image)
EndIf
;Tidy up.
GdiplusShutdown(token)
EndIf
End
;CLSID for the gdi+ jpeg encoder.
DataSection
clsid_jpeg:
Data.l $557CF401
Data.w $1A04, $11D3
Data.b $9A, $73, $00, $00, $F8, $1E, $F3, $2E
EndDataSection
t'was nothing really, -all I did was enumerate the encoder clsid's and use some old code I had for saving png's using gdi+.Sparkie wrote:Nice one srod.
Hi dear Sparkie, glad to see youSparkie wrote:I myself haven't used it, but take a look at http://www.purebasic.fr/english/viewtop ... di+wrapper
Code: Select all
---------------------------
PureBasic - Linker error
---------------------------
POLINK: fatal error: File not found: 'gdiplus.lib'.
---------------------------
OK
---------------------------
Code: Select all
#GDIPLUS_OK = 0
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)
GdipCreateBitmapFromFile(filename.p-unicode, *bitmap)
GdipSaveImageToFile(image, filename.p-unicode, *clsidEncoder.CLSID, *encoderParams)
GdipDisposeImage(image)
EndImport
;Returns #True if succesful.
Procedure.l GdipSaveImageToJpeg(sourceFile$, destinationFile$, compression.l=100) ;Compression = 0 for max compression, 100 for least.
Protected result, token, image
Protected input.GdiplusStartupInput, encParams.EncoderParameters
;First initialise gdi+.
input\GdiPlusVersion = 1
GdiplusStartup(@token, @input, #Null)
;Was the initialisation successful?
If token
If GdipCreateBitmapFromFile(sourceFile$, @image) = #GDIPLUS_OK
;Sort out the compression.
With encParams
\Count = 1
CopyMemory(?clsid_EncoderQuality, @\Parameter[0]\guid, SizeOf(GUID))
\Parameter[0]\Type = #EncoderParameterValueTypeLong
\Parameter[0]\NumberOfValues = 1
\Parameter[0]\Value = @compression
EndWith
If GdipSaveImageToFile(image, destinationFile$, ?clsid_jpeg, encParams) = #GDIPLUS_OK
result = #True
EndIf
GdipDisposeImage(image)
EndIf
;Tidy up.
GdiplusShutdown(token)
EndIf
ProcedureReturn result
EndProcedure
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
;Test.
Debug GdipSaveImageToJpeg("test.bmp", "test.jpg", 0) ;Compression = 0 for max compression, 100 for least.