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 )
$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. |
Succès: | Retourne True |
Échec: | Retourne False |
Consultez BitBlt dans la librairie MSDN.
#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