Vollzieht einen Bit-Blocktransfer von Farbdaten ("blitten")
#include <WinAPIGdi.au3>
_WinAPI_BitBlt ( $hDestDC, $iXDest, $iYDest, $iWidth, $iHeight, $hSrcDC, $iXSrc, $iYSrc, $iROP )
$hDestDC | Handle zum Ziel-Gerätekontext |
$iXDest | X Wert der linken oberen Ecke des Zielrechtecks (x-Achse) |
$iYDest | Y Wert der linken oberen Ecke des Zielrechtecks (y-Achse) |
$iWidth | Breite des zu kopierenden Rechtecks |
$iHeight | Höhe des zu kopierenden Rechtecks |
$hSrcDC | Handle zum Quell-Gerätekontext |
$iXSrc | X Wert der linken oberen Ecke des Quellrechtecks (x-Achse) |
$iYSrc | Y Wert der linken oberen Ecke des Quellrechtecks (y-Achse) |
$iROP | Legt den Code der Raster-Operation fest. Diese Codes legen die Art fest wie die Farbdaten des Quellrechtecks mit den Farbdaten des Zielrechtecks verknüpft werden um die letztendliche Darstellung der Farbdaten zu erreichen: $BLACKNESS - Füllt das Zielrechteck mit der Farbe, die mit dem Paletten-Index 0 verknüpft ist $CAPTUREBLT - Inkludiert jegliche Fenster, die das eigene Fenster überlagern in das resultierende Bild $DSTINVERT - Invertiert die Farben des Zielrechtecks (umkehren) $MERGECOPY - Mischt die Farben des Quellrechtecks mit dem in hDest aktuell gewähltem Füllmuster (Brush), unter Verwendung des AND Operators. $MERGEPAINT - Mischt die invertierten Farben des Quellrechtecks mit den Farben des Zielrechtecks unter Verwendung des OR Operators. $NOMIRRORBITMAP - Verhindert das spiegeln der Bitmap $NOTSRCCOPY - Kopiert das invertierte Quellrechteck ins Zielrechteck $NOTSRCERASE - Kombiniert die Farben des Quell- und Zielrechtecks unter Verwendung des OR Operators und invertiert dann die daraus resultierenden Farben. $PATCOPY - Kopiert das in hdcDest gewählte Füllmuster in die Ziel-Bitmap $PATINVERT - Kombiniert die Farben des Quellrechtecks mit dem in hDest aktuell gewähltem Füllmuster, mit den Farben des Zielrechtecks unter Verwendung des XOR Operators. $PATPAINT - Kombiniert die Farben des in hDest aktuell gewähltem Füllmusters, mit den Farben des invertiertem Quellrechtecks unter Verwendung des OR Operators. Das Resultat dieser Operation wird wiederum mit den Farben des Zielrechtecks kombiniert, unter Verwendung des OR Operators. $SRCAND - Kombiniert die Farben des Quell- und Zielrechtecks unter Verwendung des AND Operators $SRCCOPY - Kopiert das Quellrechteck direkt ins Zielrechteck $SRCERASE - Kombiniert die invertierten Farben des Zielrechtecks mit den Farben des Quellrechtecks unter Verwendung des AND Operators. $SRCINVERT - Kombiniert die Farben des Quell- und Zielrechtecks unter Verwendung des XOR Operators $SRCPAINT - Kombiniert die Farben des Quell- und Zielrechtecks unter Verwendung des OR Operators $WHITENESS - Füllt das Zielrechteck mit der Farbe, die mit dem Index 1 in der Physikalischen Palette verknüpft ist. |
Erfolg: | True |
Fehler: | False |
Suche nach BitBlt in der MSDN Bibliothek.
#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() ;initialize GDI+
Local Const $iWidth = 600, $iHeight = 600, $iBgColor = 0x202020 ;$iBGColor format RRGGBB
$g_hGUI = GUICreate("GDI+ Example (" & @ScriptName & ")", $iWidth, $iHeight) ;create a test GUI
GUISetBkColor($iBgColor, $g_hGUI) ;set GUI background color
GUISetState(@SW_SHOW)
;create a faster buffered graphics frame set for smoother gfx object movements
Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) ;create an empty bitmap
$g_hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ;convert GDI+ bitmap to GDI bitmap
_GDIPlus_BitmapDispose($hBitmap) ;delete GDI+ bitmap because not needed anymore
$g_hDC = _WinAPI_GetDC($g_hGUI) ;get device context from GUI
$g_hDC_Backbuffer = _WinAPI_CreateCompatibleDC($g_hDC) ;creates a memory device context compatible with the specified device
$g_oDC_Obj = _WinAPI_SelectObject($g_hDC_Backbuffer, $g_hHBITMAP) ;selects an object into the specified device context
$g_hGfxCtxt = _GDIPlus_GraphicsCreateFromHDC($g_hDC_Backbuffer) ;create a graphics object from a device context (DC)
_GDIPlus_GraphicsSetSmoothingMode($g_hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;set smoothing mode (8 X 4 box filter)
_GDIPlus_GraphicsSetPixelOffsetMode($g_hGfxCtxt, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
$g_hPen = _GDIPlus_PenCreate() ;create a pen object
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
Local Const $fDeg = ACos(-1) / 180 ;ACos(-1) is nearly 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] ;create an array to save coordinates of the x/y coordinates
Do
_GDIPlus_GraphicsClear($g_hGfxCtxt, 0xFF000000 + $iBgColor) ;clear bitmap with given color (AARRGGBB format)
For $i = 0 To $iDots - 1
$iXPos = $iX_Center + Cos($fAngle * $fDeg) * $iRadius ;calculate x position
$iYPos = $iY_Center + Sin($fAngle * $fDeg) * $iRadius ;calculate y position
$aCoordinates[$i][0] = $iXPos
$aCoordinates[$i][1] = $iYPos
_GDIPlus_PenSetColor($g_hPen, 0xFFFFFF00) ;set pen color for inner lines
_GDIPlus_PenSetWidth($g_hPen, 2) ;set pen size for outer lines
_GDIPlus_GraphicsDrawLine($g_hGfxCtxt, $aCoordinates[$i][0], $aCoordinates[$i][1], _ ;draw inner lines
$aCoordinates[Mod(($i + $iDots / 2), $iDots)][0], $aCoordinates[Mod(($i + $iDots / 2), $iDots)][1], $g_hPen) ;draw to opposite side
_GDIPlus_PenSetColor($g_hPen, 0xFFFF8000) ;set pen color
_GDIPlus_PenSetWidth($g_hPen, 3) ;set pen size
;array of coordinates should be filled before first draw to screen
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) ;;draw outer lines
$fAngle += $fAngelDist ;increase angle to next dot
Next
;draw last line to 1st line
_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) ;copy backbuffer to screen (GUI)
$fAngle -= 0.5 ;decrease overall angle
$iRound += 1
Until Not Sleep(30) ;Sleep() always returns 1 and Not 1 is 0 correspond to False
_Exit()
EndFunc ;==>Example
Func _Exit() ;cleanup GDI+ resources
_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
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$hGui = GUICreate("_WinAPI_BitBlt", 640, 480)
GUISetState()
$hWnd = _WinAPI_GetDesktopWindow()
$hDC_Gui = _WinAPI_GetDC($hGui)
$hDC_Desk = _WinAPI_GetDC($hWnd)
_WinAPI_BitBlt($hDC_Gui, 0, 0, 640, 480, $hDC_Desk, 0, 0, $SRCINVERT)
_WinAPI_BitBlt($hDC_Gui, 100, 100, 320, 240, $hDC_Desk, 0, 0, $SRCCOPY)
While GUIGetMsg() <> -3
Sleep(10)
WEnd
_WinAPI_ReleaseDC($hGui, $hDC_Gui)
_WinAPI_ReleaseDC($hWnd, $hDC_Desk)