Crée un DIB dans lequel les applications peuvent écrire directement
#include <WinAPIGdi.au3>
_WinAPI_CreateDIBSection ( $hDC, $tBITMAPINFO, $iUsage, ByRef $pBits [, $hSection = 0 [, $iOffset = 0]] )
$hDC | Handle d'un contexte de périphérique. Si la valeur de $iUsage est $DIB_PAL_COLORS, la fonction utilise la palette logique du contexte de périphérique pour initialiser les couleurs du DIB. |
$tBITMAPINFO | La structure $tagBITMAPINFO qui spécifie les divers attributs du DIB, y compris les dimensions et les couleurs du bitmap. |
$iUsage | Le type de couleurs utilisée (les index de la palette logiques ou les valeurs RVB littérales). Les valeurs suivantes sont définies: $DIB_PAL_COLORS $DIB_RGB_COLORS |
$pBits | Retourne un pointeur sur l'emplacement des valeurs de bits du DIB. |
$hSection | [optionnel] Handle de l'objet de mappage de fichier que la fonction va utiliser pour créer le DIB. |
$iOffset | [optionnel] Le décalage depuis le début de l'objet de mappage de fichier référencé par $hSection où le stockage pour les valeurs des bits du bitmap commence. Cette valeur est ignorée si $hSection est 0 (valeur par défaut). |
Succès: | Retourne le handle du DIB nouvellement créé, et $pBits pointe sur les valeurs des bits du bitmap. Vous pouvez créer la structure en utilisant le pointeur $pBits pour continuer son remplissage. Par exemple, DllStructCreate('dword[256]', $pBits). |
Échec: | Retourne 0, $pBits est défini à 0. |
Lorsque vous n'avez plus besoin du bitmap, appelez la fonction _WinAPI_DeleteObject() pour le supprimer.
Consultez CreateDIBSection dans la librairie MSDN.
#include <APIGdiConstants.au3> #include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIHObj.au3> ; Crée un bitmap de 32 bits par pixel indépendant du périphérique (DIB) qui utilise un masque Local $tBIV5HDR = DllStructCreate($tagBITMAPV5HEADER) DllStructSetData($tBIV5HDR, 'bV5Size', DllStructGetSize($tBIV5HDR)) DllStructSetData($tBIV5HDR, 'bV5Width', 256) DllStructSetData($tBIV5HDR, 'bV5Height', 256) DllStructSetData($tBIV5HDR, 'bV5Planes', 1) DllStructSetData($tBIV5HDR, 'bV5BitCount', 32) DllStructSetData($tBIV5HDR, 'biCompression', $BI_BITFIELDS) DllStructSetData($tBIV5HDR, 'bV5SizeImage', 0) DllStructSetData($tBIV5HDR, 'bV5XPelsPerMeter', 0) DllStructSetData($tBIV5HDR, 'bV5YPelsPerMeter', 0) DllStructSetData($tBIV5HDR, 'bV5ClrUsed', 0) DllStructSetData($tBIV5HDR, 'bV5ClrImportant', 0) DllStructSetData($tBIV5HDR, 'bV5RedMask', 0x00FF0000) DllStructSetData($tBIV5HDR, 'bV5GreenMask', 0x0000FF00) DllStructSetData($tBIV5HDR, 'bV5BlueMask', 0x000000FF) DllStructSetData($tBIV5HDR, 'bV5AlphaMask', 0xFF000000) DllStructSetData($tBIV5HDR, 'bV5CSType', 0) DllStructSetData($tBIV5HDR, 'bV5Endpoints', 0, 1) DllStructSetData($tBIV5HDR, 'bV5Endpoints', 0, 2) DllStructSetData($tBIV5HDR, 'bV5Endpoints', 0, 3) DllStructSetData($tBIV5HDR, 'bV5GammaRed', 0) DllStructSetData($tBIV5HDR, 'bV5GammaGreen', 0) DllStructSetData($tBIV5HDR, 'bV5GammaBlue', 0) DllStructSetData($tBIV5HDR, 'bV5Intent', 0) DllStructSetData($tBIV5HDR, 'bV5ProfileData', 0) DllStructSetData($tBIV5HDR, 'bV5ProfileSize', 0) DllStructSetData($tBIV5HDR, 'bV5Reserved', 0) Local $pBits Local $hBitmap = _WinAPI_CreateDIBSection(0, $tBIV5HDR, $DIB_RGB_COLORS, $pBits) ; Remplit le bitmap en vert avec un canal alpha variable Local $tBits = DllStructCreate('dword[65536]', $pBits) For $y = 0 To 255 For $x = 1 To 256 DllStructSetData($tBits, 1, BitOR(0x00FF00, BitShift($y, -24)), $x + (256 * $y)) Next Next ; Crée une GUI Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 256, 256) Local $idPic = GUICtrlCreatePic('', 0, 0, 256, 256) Local $hPic = GUICtrlGetHandle($idPic) ; Définit le bitmap dans le contrôle _SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap) Local $hObj = _SendMessage($hPic, $STM_GETIMAGE) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf ; Définit la couleur d'arrière-plan en vert et affiche la GUI GUISetBkColor(0x0000FF) GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE