UDF > WinAPIEx > GDI > BitMaps >


_WinAPI_BitBlt

Effectue un transfert de blocs de bits de données de couleur

#include <WinAPIGdi.au3>
_WinAPI_BitBlt ( $hDestDC, $iXDest, $iYDest, $iWidth, $iHeight, $hSrcDC, $iXSrc, $iYSrc, $iROP )

Paramètres

$hDestDC Handle du contexte de périphérique de destination
$iXDest Valeur X du coin supérieur gauche du rectangle de destination
$iYDest Valeur Y du coin supérieur gauche du rectangle de destination
$iWidth Largeur des rectangles source et destination
$iHeight Hauteur des rectangles source et destination
$hSrcDC Handle du contexte de périphérique source
$iXSrc Valeur X du coin supérieur gauche du rectangle source
$iYSrc Valeur Y du coin supérieur gauche du rectangle source
$iROP Indique un code d'opération de trame. Ces codes définissent la manière dont les données de couleur du rectangle source doivent être combinée avec les données de couleur du rectangle destination pour obtenir la couleur finale:
    $BLACKNESS - Remplit le rectangle destination en utilisant la couleur associée d'index 0 de la palette
    $CAPTUREBLT - Inclut des fenêtres qui sont posées sur le dessus de votre fenêtre dans l'image résultante
    $DSTINVERT - Inverse le rectangle de destination
    $MERGECOPY - Fusionne la couleur du rectangle source avec le pinceau sélectionné dans hDest, en utilisant l'opérateur AND.
    $MERGEPAINT - Fusionne la couleur du rectangle source inversé avec les couleurs du rectangle de destination en utilisant l'opérateur OR.
    $NOMIRRORBITMAP - Empêche le bitmap d'être en miroir
    $NOTSRCCOPY - Copie le rectangle source inversé dans la destination
    $NOTSRCERASE - Combine les couleurs des rectangles source et destination en utilisant l'opérateur OR, puis inverse la couleur résultante.
    $PATCOPY - Copie le pinceau sélectionné dans hdcDest, dans le bitmap de destination
    $PATINVERT - Combine les couleurs du pinceau en cours de sélection par hDest, avec les couleurs du rectangle destination en utilisant l'opérateur XOR.
    $PATPAINT - Combine les couleurs du pinceau en cours de sélection par hDest, avec les couleurs du rectangle source inversé en utilisant l'opérateur OR. Le résultat de cette opération est combiné avec la couleur du rectangle destination en utiisant l'opérateur OR.
    $SRCAND - Combine les couleurs des rectangles source et destination en utilisant l'opérateur AND
    $SRCCOPY - Copie le rectangle source directement dans le rectangle destination
    $SRCERASE - Combine les couleurs inversées du rectangle destination avec les couleurs du rectangle source en utilisant l'opérateur AND.
    $SRCINVERT - Combine les couleurs des rectangles source et destination à l'aide de l'opérateur XOR
    $SRCPAINT - Combine les couleurs des rectangles source et destination en utilisant l'opérateur OR
    $WHITENESS - Remplit le rectangle de destination en utilisant la couleur associée à l'index 1 dans la palette physique.

Valeur de retour

Succès: Retourne True
Échec: Retourne False

Voir aussi

Consultez BitBlt dans la librairie MSDN.

Exemple

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIGdi.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIHObj.au3>
#include <WindowsConstants.au3>

Global $g_hGUI, $g_hHBITMAP, $g_hDC, $g_hDC_Backbuffer, $g_oDC_Obj, $g_hGfxCtxt, $g_hPen

Example()

Func Example()
    AutoItSetOption("GUIOnEventMode", 1)

    _GDIPlus_Startup() ; initialise GDI+
    Local Const $iWidth = 600, $iHeight = 600, $iBgColor = 0x202020 ; Format $iBGColor RRGGBB

    $g_hGUI = GUICreate("GDI+ example", $iWidth, $iHeight) ; Crée une interface de test
    GUISetBkColor($iBgColor, $g_hGUI) ; Définit l'interface graphique couleur de fond
    GUISetState(@SW_SHOW)

    ; Crée un ensemble de bloc graphique plus rapide avec mémoire tampon pour lisser les  mouvements des objets gfx
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) ; Crée un bitmap vide
    $g_hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ; Convertit le bitmap GDI+ en  bitmap GDI
    _GDIPlus_BitmapDispose($hBitmap) ; Supprime le bitmap GDI+ parce qu'il n'est plus utile

    $g_hDC = _WinAPI_GetDC($g_hGUI) ; Obtient le contexte de périphérique de la GUI
    $g_hDC_Backbuffer = _WinAPI_CreateCompatibleDC($g_hDC) ; Crée un contexte de périphérique  mémoire compatible avec le périphérique spécifié
    $g_oDC_Obj = _WinAPI_SelectObject($g_hDC_Backbuffer, $g_hHBITMAP) ; Sélectionne un objet dans le contexte de périphérique spécifié
    $g_hGfxCtxt = _GDIPlus_GraphicsCreateFromHDC($g_hDC_Backbuffer) ; Crée un objet graphique à partir d'un contexte de périphérique (DC)
    _GDIPlus_GraphicsSetSmoothingMode($g_hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ; Définit le mode lissage (filtre des rectangles 8 X 4)
    _GDIPlus_GraphicsSetPixelOffsetMode($g_hGfxCtxt, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)

    $g_hPen = _GDIPlus_PenCreate() ; Créer un objet crayon

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    Local Const $fDeg = ACos(-1) / 180 ; ACos(-1) est proche de pi
    Local $iX_Center = $iWidth / 2, $iY_Center = $iHeight / 2, $iXPos, $iYPos, $fAngle = 0, $iRound = 0
    Local Const $iDots = 7, $fAngelDist = 360 / $iDots, $iRadius = 250
    Local $aCoordinates[$iDots][2] ; Crée un tableau pour enregistrer les coordonnées des coordonnées x, y
    Do
        _GDIPlus_GraphicsClear($g_hGfxCtxt, 0xFF000000 + $iBgColor) ; Efface le bitmap avec la couleur donnée (au format AARRGGBB)
        For $i = 0 To $iDots - 1
            $iXPos = $iX_Center + Cos($fAngle * $fDeg) * $iRadius ; calcule la position x
            $iYPos = $iY_Center + Sin($fAngle * $fDeg) * $iRadius ; calcule la position y
            $aCoordinates[$i][0] = $iXPos
            $aCoordinates[$i][1] = $iYPos
            _GDIPlus_PenSetColor($g_hPen, 0xFFFFFF00) ; Définit la couleur du crayon pour les lignes intérieures
            _GDIPlus_PenSetWidth($g_hPen, 2) ; Définit la taille du crayon pour les lignes extérieures
            _GDIPlus_GraphicsDrawLine($g_hGfxCtxt, $aCoordinates[$i][0], $aCoordinates[$i][1], _ ; tracer des lignes intérieures
                    $aCoordinates[Mod(($i + $iDots / 2), $iDots)][0], $aCoordinates[Mod(($i + $iDots / 2), $iDots)][1], $g_hPen) ; Dessine le côté opposé
            _GDIPlus_PenSetColor($g_hPen, 0xFFFF8000) ; Définit la couleur du crayon
            _GDIPlus_PenSetWidth($g_hPen, 3) ; Définit la taille du crayon
            ; Le tableau de coordonnées doit être rempli avant le premier dessin sur l'écran
            If $i < $iDots - 1 Then _GDIPlus_GraphicsDrawLine($g_hGfxCtxt, $aCoordinates[$i][0], $aCoordinates[$i][1], $aCoordinates[$i + 1][0], $aCoordinates[$i + 1][1], $g_hPen) ; Trace les lignes extérieures
            $fAngle += $fAngelDist ; Augmente l'angle pour le prochain point
        Next
        ; Dessine de la dernière ligne à la 1ère ligne
        _GDIPlus_GraphicsDrawLine($g_hGfxCtxt, $aCoordinates[$i - 1][0], $aCoordinates[$i - 1][1], $aCoordinates[0][0], $aCoordinates[0][1], $g_hPen)

        If $iRound Then _WinAPI_BitBlt($g_hDC, 0, 0, $iWidth, $iHeight, $g_hDC_Backbuffer, 0, 0, $SRCCOPY) ; Copie le backbuffer à l'écran (GUI)
        $fAngle -= 0.5 ; diminue angle global
        $iRound += 1
    Until Not Sleep(30) ; Sleep() retourne toujours 1 et (Not 1) est 0, qui correspond à False

    _Exit()
EndFunc   ;==>Example

Func _Exit() ; Nettoie les ressources GDI+
    _GDIPlus_PenDispose($g_hPen)
    _WinAPI_SelectObject($g_hDC_Backbuffer, $g_oDC_Obj)
    _GDIPlus_GraphicsDispose($g_hGfxCtxt)
    _WinAPI_DeleteObject($g_hHBITMAP)
    _WinAPI_ReleaseDC($g_hGUI, $g_hDC)
    GUIDelete($g_hGUI)
    Exit
EndFunc   ;==>_Exit