# Function Reference

# _WinAPI_BitBlt

Performs a bit-block transfer of color data

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

## Parameters

$hDestDC | Handle to the destination device context
$iXDest | X value of the upper-left corner of the destination rectangle
$iYDest | Y value of the upper-left corner of the destination rectangle
$iWidth | Width of the source and destination rectangles
$iHeight | Height of the source and destination rectangles
$hSrcDC | Handle to the source device context
$iXSrc | X value of the upper-left corner of the source rectangle
$iYSrc | Y value of the upper-left corner of the source rectangle
$iROP | Specifies a raster operation code. These codes define how the color data for the source rectangle is to be combined with the color data for the destination rectangle to achieve the final color: $BLACKNESS - Fills the destination rectangle using the color associated with palette index 0 $CAPTUREBLT - Includes any window that are layered on top of your window in the resulting image $DSTINVERT - Inverts the destination rectangle $MERGECOPY - Merges the color of the source rectangle with the brush currently selected in hDest, by using the AND operator. $MERGEPAINT - Merges the color of the inverted source rectangle with the colors of the destination rectangle by using the OR operator. $NOMIRRORBITMAP - Prevents the bitmap from being mirrored $NOTSRCCOPY - Copies the inverted source rectangle to the destination $NOTSRCERASE - Combines the colors of the source and destination rectangles by using the OR operator and then inverts the resultant color. $PATCOPY - Copies the brush selected in hdcDest, into the destination bitmap $PATINVERT - Combines the colors of the brush currently selected in hDest, with the colors of the destination rectangle by using the XOR operator. $PATPAINT - Combines the colors of the brush currently selected in hDest, with the colors of the inverted source rectangle by using the OR operator. The result of this operation is combined with the color of the destination rectangle by using the OR operator. $SRCAND - Combines the colors of the source and destination rectangles by using the AND operator $SRCCOPY - Copies the source rectangle directly to the destination rectangle $SRCERASE - Combines the inverted color of the destination rectangle with the colors of the source rectangle by using the AND operator. $SRCINVERT - Combines the colors of the source and destination rectangles by using the XOR operator $SRCPAINT - Combines the colors of the source and destination rectangles by using the OR operator $WHITENESS - Fills the destination rectangle using the color associated with index 1 in the physical palette.

## Return Value

Success: | True
Failure: | False

## See Also

Search BitBlt in MSDN Library.

## Example

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPIGdiDC.au3>
    #include <WinAPIHObj.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