UDF > WinAPIEx > GDI > BitMaps >


_WinAPI_CreateDIB

Crée un bitmap indépendant du périphérique (DIB) et non compressé, avec la largeur, la hauteur et la profondeur de couleur spécifiées

#include <WinAPIGdi.au3>
_WinAPI_CreateDIB ( $iWidth, $iHeight [, $iBitsPerPel = 32 [, $tColorTable = 0 [, $iColorCount = 0]]] )

Paramètres

$iWidth La largeur du bitmap en pixels.
$iHeight La hauteur du bitmap en pixels. Si cette valeur est positive, le bitmap est un DIB de bas en haut et son origine est le coin inférieur gauche, sinon, le bitmap est un DIB de haut en bas et son origine est le coin supérieur gauche.
$iBitsPerPel [optionnel] Le nombre de bits qui définissent chaque pixel et le nombre maximum de couleurs dans le bitmap. La valeur par défaut est 32.
$tColorTable [optionnel] La structure "dword[n]" qui représente la table de couleurs du DIB.
Le nombre de couleurs dans cette table dépend de la valeur du paramètre $iBitsPerPel.
$iColorCount [optionnel] Le nombre d'index de couleur dans la table des couleurs DIB qui sont effectivement utilisés par le bitmap.
La valeur de ce paramètre ne doit pas dépasser le nombre de couleurs dans la table des couleurs pointé par le paramètre $pColorTable. La valeur par défaut est 0.

Valeur de retour

Succès: Retourne le handle de la DIB.
Échec: Retourne 0 et définit @error <> 0.

Remarques

Si le bitmap est monochrome (1 bit par pixel), la table des couleurs doit contenir deux entrées.
Si la table de couleur n'est pas spécifié, la fonction crée un bitmap monochrome avec deux couleurs: noir et blanc. Si le bitmap utilise 4 ou 8 bits par pixel, la table des couleurs devrait contenir jusqu'à 16 ou 256 entrées respectivement.
Dans ce cas, si la table de couleur n'est pas spécifiée, la fonction crée une table de couleurs vide (toutes les couleurs sont le noir) avec le plus grand nombre possible d'entrées pour la profondeur de couleur spécifiée.
Vous pouvez remplir cette table de couleur ultérieurement en utilisant la fonction _WinAPI_SetDIBColorTable().
Si le bitmap utilise 16, 24 ou 32 bits par pixel, la table des couleurs n'est pas utilisée, et le paramètre $tColorTable est ignoré.

Cette fonction ne crée pas des bitmaps 16, 24, ou 32 bits par pixel compressés, ce qui est le membre "biCompression" de la structure $tagBITMAPINFO qui est toujours 0 ($BI_RGB).

Lorsque vous avez fini d'utiliser le bitmap, détruisez-le en utilisant la fonction _WinAPI_DeleteObject().

Appelez _WinAPI_GetExtended() pour obtenir un pointeur vers l'emplacement des valeurs de bits DIB.

En relation

_WinAPI_DeleteObject, _WinAPI_GetExtended

Exemple

#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIHObj.au3>
#include <WinAPIMem.au3>
#include <WinAPIMisc.au3>

; Crée un tableau de couleur de 256 entrées nécessaire pour un bitmap de 8 bits par pixel
Local $aColorTable[256]
For $i = 0 To 255
    $aColorTable[$i] = _WinAPI_RGB(0, $i, 255 - $i)
Next

; Crée la table de couleur à partir du tableau de couleur
Local $tColorTable = _WinAPI_CreateDIBColorTable($aColorTable)

; Crée un bitmap indépendant du périphérique (DIB) de 8 bits par pixel and récupère un pointeur sur la position de ses valeurs de bit
Local $hBitmap = _WinAPI_CreateDIB(256, 256, 8, $tColorTable, 256)
Local $pBits = _WinAPI_GetExtended()

; Remplit les index des couleurs du bitmap
For $i = 0 To 255
    _WinAPI_FillMemory($pBits + 256 * $i, 256, $i)
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)

; Crée un bitmap DDB à partir d'un bitmap DIB pour un affichage correct dans le contrôle
Local $hDC = _WinAPI_GetDC($hPic)
Local $hDev = _WinAPI_CreateCompatibleBitmap($hDC, 256, 256)
Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hMemSv = _WinAPI_SelectObject($hMemDC, $hDev)
_WinAPI_DrawBitmap($hMemDC, 0, 0, $hBitmap)
_WinAPI_ReleaseDC($hPic, $hDC)
_WinAPI_SelectObject($hMemDC, $hMemSv)
_WinAPI_DeleteDC($hMemDC)

; Définit le bitmap du contrôle $hPic
_SendMessage($hPic, $STM_SETIMAGE, 0, $hDev)
Local $hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hDev Then
    _WinAPI_DeleteObject($hDev)
EndIf

; Affiche la GUI
GUISetState(@SW_SHOW)

; Sauvegarde le bitmap 8 bits par pixel dans un fichier .bmp
Local $sPath = FileSaveDialog('Save Image', @TempDir, 'Bitmap Image Files (*.bmp)', 2 + 16, 'MyImage.bmp', $hForm)
If $sPath Then
    _WinAPI_SaveHBITMAPToFile($sPath, $hBitmap, 2834, 2834)
EndIf

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE