UDF > WinAPIEx > GDI > BitMaps >


_WinAPI_CreateDIBSection

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]] )

Paramètres

$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).

Valeur de retour

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.

Remarque

Lorsque vous n'avez plus besoin du bitmap, appelez la fonction _WinAPI_DeleteObject() pour le supprimer.

En relation

_WinAPI_DeleteObject

Voir aussi

Consultez CreateDIBSection dans la librairie MSDN.

Exemple

#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