Voila ce que j'arrive a bricoler avec un peut de temps, et de surf sur le forum anglais, mais ça marche pas.
Code : Tout sélectionner
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#Include <Memory.au3>
#include <perso\ImageResize.au3>
Global Const $InterpolationModeInvalid = -1
Global Const $InterpolationModeDefault = 0
Global Const $InterpolationModeLowQuality = 1
Global Const $InterpolationModeHighQuality = 2
Global Const $InterpolationModeBilinear = 3
Global Const $InterpolationModeBicubic = 4
Global Const $InterpolationModeNearestNeighbor = 5
Global Const $InterpolationModeHighQualityBilinear = 6
Global Const $InterpolationModeHighQualityBicubic = 7
_GDIPlus_Startup()
; ##############################################################
$hBitmap = _ScreenCapture_Capture()
$bitmap = _HBitmapResize($hBitmap, 800, 600)
$bitmapData = _GDIPlus_BitmapLockBits($bitmap, 0, 0, 800, 600, $GDIP_ILMREAD, $GDIP_PXF24RGB)
$Scan0 = DllStructGetData($bitmapData, "Scan0")
_GDIPlus_BitmapUnlockBits($bitmap, $bitmapData)
$bitmapData = 0
$v_BufferA = DllStructCreate("byte[" & 800 * 600 * 3 & "]", $Scan0) ; Create DLL structure for all pixels
$AllPixels = DllStructGetData($v_BufferA, 1)
$v_BufferA = 0
ConsoleWrite(StringLen($AllPixels) & @CRLF) ; Final pixels string (Binary) de forme: 0x111111222222333333444444 ... (RGB)
_GDIPlus_BitmapDispose($bitmap)
_WinApi_DeleteObject($hBitmap)
; ##############################################################
$bin = Binary($AllPixels)
$binLen = BinaryLen($bin)
$hData = _MemGlobalAlloc($binLen, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002)
$pData = _MemGlobalLock($hData) ;translate the handle into a pointer
$tMem = DllStructCreate("byte[" & $binLen & "]", $pData) ;create struct
DllStructSetData($tMem, 1, $bin) ;fill struct with image data
_MemGlobalUnlock($hData)
$newHB = _WinApi_CreateBitmap(800, 600)
$newbitmap = _HBitmapResize($newHB, 800, 600)
$bitmapData = _GDIPlus_BitmapLockBits($newbitmap, 0, 0, 800, 600, $GDIP_ILMWRITE, $GDIP_PXF24RGB)
DllStructSetData($bitmapData, "Scan0", $pData)
_GDIPlus_BitmapUnlockBits($newbitmap, $bitmapData)
_GDIPlus_ImageSaveToFile($newbitmap, @ScriptDir & "\test.jpg")
_GDIPlus_BitmapDispose($newbitmap)
_WinApi_DeleteObject($newHB)
$tMem = 0
; ##############################################################
Func _HBitmapResize($hbitmap, $iWidth, $iHeight)
$bitmap = _GDIPlus_BitmapCreateFromHBITMAP($hbitmap)
; ---
$graphics = _GDIPlus_ImageGetGraphicsContext($bitmap)
$resizedbitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $graphics)
$graphics2 = _GDIPlus_ImageGetGraphicsContext($resizedbitmap)
_GDIPLUS_GraphicsSetInterpolationMode($graphics2, $InterpolationModeHighQualityBicubic)
_GDIPlus_GraphicsDrawImageRect($graphics2, $bitmap, 0, 0, $iWidth, $iHeight)
;_GDIPlus_ImageSaveToFile($resizedbitmap, @ScriptDir & "\test.jpg")
_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_GraphicsDispose($graphics2)
_GDIPlus_BitmapDispose($bitmap)
; _GDIPlus_BitmapDispose($resizedbitmap)
Return $resizedbitmap
EndFunc ;==>_SavehBitmap
Func _GDIPLUS_GraphicsSetInterpolationMode($hGraphics, $iMode)
DllCall($ghGDIPDll, "int", "GdipSetInterpolationMode", "hwnd", $hGraphics,"int",$iMode)
EndFunc ;==>_GDIPLUS_GraphicsSetInterpolationMode
_GDIPlus_Shutdown()