In diesem Fall würde ich es in Gdi+ umwandeln und dann mit _GdiPlus_ImageSaveToFile speichern.
Bei Bedarf wieder laden, zu einem HBitmap umwandeln und auf ein DDBitmap blitten...
trotzdem hier noch meine Version mit Speicherfunktion
Spoiler anzeigen
#include <Memory.au3>
#include <ScreenCapture.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
$hBmp = _ScreenCapture_Capture("", 0, 0, 500, 500)
$tData = _GetBmpData($hBmp)
_WinAPI_DeleteObject($hBmp)
_SaveBmpData(@ScriptDir & "\Test.dat", $tData)
$tDataNew = _LoadBmpData(@ScriptDir & "\Test.dat")
$hBmpNew = _CreateBmpFromData($tDataNew)
_ScreenCapture_SaveImage(@ScriptDir & "\Test.bmp", $hBmpNew)
Func _SaveBmpData($sFilename, $tData)
Local $tSave = DllStructCreate("byte[" & DllStructGetSize($tData) & "]", DllStructGetPtr($tData))
Local $hFile = FileOpen($sFilename, 18)
FileWrite($hFile, DllStructGetData($tSave, 1))
FileClose($hFile)
EndFunc ;==>_SaveBmpData
Func _LoadBmpData($sFilename)
Local $hFile = FileOpen($sFilename, 16)
Local $bData = FileRead($hFile)
FileClose($hFile)
Local $tLoad = DllStructCreate("byte[" & BinaryLen($bData) & "]")
DllStructSetData($tLoad, 1, $bData)
Local $tBITMAPINFO = DllStructCreate($tagBITMAPINFO, DllStructGetPtr($tLoad))
Local $iSize = DllStructGetData($tBITMAPINFO, "SizeImage")
Local $tStruct = DllStructCreate($tagBITMAPINFO & ";byte Data[" & $iSize & "]")
_MemMoveMemory(DllStructGetPtr($tLoad), DllStructGetPtr($tStruct), DllStructGetSize($tLoad))
Return $tStruct
EndFunc ;==>_LoadBmpData
Func _CreateBmpFromData($tData)
Local $tBITMAPINFO = DllStructCreate($tagBITMAPINFO, DllStructGetPtr($tData))
Local $iSize = DllStructGetData($tBITMAPINFO, "SizeImage")
Local $tStruct = DllStructCreate($tagBITMAPINFO & ";byte Data[" & $iSize & "]", DllStructGetPtr($tData))
Local $pStruct = DllStructGetPtr($tStruct)
Local $iWidth = DllStructGetData($tBITMAPINFO, "Width")
Local $iHeight = DllStructGetData($tBITMAPINFO, "Height")
Local $hWnd = _WinAPI_GetDesktopWindow()
Local $hDDC = _WinAPI_GetDC($hWnd)
Local $hBmp = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)
_WinAPI_SetDIBits($hDDC, $hBmp, 0, $iHeight, $pStruct + DllStructGetSize($tBITMAPINFO), DllStructGetPtr($tBITMAPINFO))
_WinAPI_ReleaseDC($hWnd, $hDDC)
Return $hBmp
EndFunc ;==>_CreateBmpFromData
Func _GetBmpData($hBmp)
Local $tBITMAPINFO = DllStructCreate($tagBITMAPINFO)
DllStructSetData($tBITMAPINFO, "Size", DllStructGetSize($tBITMAPINFO))
Local $hWnd = _WinAPI_GetDesktopWindow()
Local $hDDC = _WinAPI_GetDC($hWnd)
_WinAPI_GetDIBits($hDDC, $hBmp, 0, 0, 0, DllStructGetPtr($tBITMAPINFO), 0)
Local $iSize = DllStructGetData($tBITMAPINFO, "SizeImage")
Local $tData = DllStructCreate($tagBITMAPINFO & ";byte Data[" & $iSize & "]")
DllStructSetData($tData, "Size", DllStructGetSize($tBITMAPINFO))
Local $pData = DllStructGetPtr($tData)
Local $iLines = DllStructGetData($tBITMAPINFO, "Height")
[/autoit] [autoit][/autoit] [autoit]_WinAPI_GetDIBits($hDDC, $hBmp, 0, 0, 0, $pData, 0)
_WinAPI_GetDIBits($hDDC, $hBmp, 0, $iLines, $pData + DllStructGetSize($tBITMAPINFO), $pData, 0)
_WinAPI_ReleaseDC($hWnd, $hDDC)
Return $tData
EndFunc ;==>_GetBmpData