Da es um die Geschwindigkeit geht, würde ich das so machen:
Spoiler anzeigen
#include <File.au3>
#include <GDIPlus.au3>
#include <GDIPlusConstants.au3>
#include <WinAPI.au3>
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $tGUID = _WinAPI_GUIDFromString("{557CF401-1A04-11D3-9A73-0000F81EF32E}")
Global $pGUID = DllStructGetPtr($tGUID)
Global $tParams = _GDIPlus_ParamInit(1)
Global $pParams = DllStructGetPtr($tParams)
Global $tData = DllStructCreate("int Quality")
DllStructSetData($tData, "Quality", 50)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, DllStructGetPtr($tData))
Global $aFiles = _FileListToArray(@ScriptDir & "\BMP\", "*.bmp")
Global $iTimer = TimerInit()
For $i = 1 To $aFiles[0]
_ConvertBMP2JPG(@ScriptDir & "\BMP\" & $aFiles[$i])
Next
ConsoleWrite(TimerDiff($iTimer) & @CRLF)
_GDIPlus_Shutdown()
Func _ConvertBMP2JPG($sFileName)
Local $aResult = DllCall($ghGDIPDll, "int", "GdipLoadImageFromFile", "wstr", $sFileName, "ptr*", 0)
DllCall($ghGDIPDll, "int", "GdipSaveImageToFile", "handle", $aResult[2], "wstr", StringTrimRight($sFileName, 3) & "jpg", "ptr", $pGUID, "ptr", $pParams)
DllCall($ghGDIPDll, "int", "GdipDisposeImage", "handle", $aResult[2])
EndFunc ;==>_ConvertBMP2JPG
Diese Variante ist fast genauso schnell wie FreeImage.dll und mehr als doppelt so schnell wie Convert.exe (ImageMagic)
Das sollte doch ausreichen, oder ![]()
Edit: Falls du FreeImage testen willst, das wäre die Funktion dafür:
[autoit]Func _ConvertBMP2JPG_FreeImage($sFileName)
Local $aResult = DllCall($hDll, "ptr", "_FreeImage_Load@12", "int", 0, "str", $sFileName, "int", 0)
DllCall($hDll,"int", "_FreeImage_Save@16", "int", 2, "ptr", $aResult[0], "str", StringTrimRight($sFileName,3) & "jpg", "int", 50)
DllCall($hDll, "none", "_FreeImage_Unload@4", "ptr", $aResult[0])
EndFunc