Funktionsreferenz

_GDIPlus_BitmapLockBits

Sperrt einen Teil einer Bitmap für Lese- und Schreiboperationen.

#Include <GDIPlus.au3>
_GDIPlus_BitmapLockBits($hBitmap, $iLeft, $iTop, $iWidth, $iHeight [ , $iFlags = $GDIP_ILMREAD [, $iFormat = $GDIP_PXF32RGB ]])

 

Parameter

$hBitmap Handle zu einem Bitmap-Objekt
$iLeft X-Koordinate der oberen linken Ecke des zu sperrenden Rechtecks
$iTop Y-Koordinate der oberen linken Ecke des zu sperrenden Rechtecks
$iWidth Die Breite des zu sperrenden Rechtecks
$iHeight Die Höhe des zu sperrenden Rechtecks
$iFlags [optional] Satz von Flags, die festlegen, ob die gesperrte Region gelesen oder beschrieben werden kann
und ob der Aufrufende schon einen Pufferspeicher zugewiesen hat.
Kann eine Kombination der Folgenden sein:
$GDIP_ILMREAD - Ein Teil des Bildes ist für Leseoperationen gesperrt.
$GDIP_ILMWRITE - Ein Teil des Bildes ist für Schreiboperationen gesperrt.
$GDIP_ILMUSERINPUTBUF - Der Pufferspeicher wurde vom Benutzer reserviert.
$iFormat [optional] Gibt das Pixelformat im Pufferspeicher an:
$GDIP_PXF01INDEXED - 1 Bit pro Pixel, indiziert.
$GDIP_PXF04INDEXED - 4 Bit pro Pixel, indiziert.
$GDIP_PXF08INDEXED - 8 Bit pro Pixel, indiziert.
$GDIP_PXF16GRAYSCALE - 16 Bit pro Pixel, Graustufen.
$GDIP_PXF16RGB555 - 16 Bit pro Pixel; je 5 Bits pro Grundfarbe RGB.
$GDIP_PXF16RGB565 - 16 Bit pro Pixel; 5 Bits Rot, 6 Bits Grün und 5 Bits Blau.
$GDIP_PXF16ARGB1555 - 16 Bit pro Pixel; 1 Bit Alphakanal und 5 Bits für jede RGB-Komponente.
$GDIP_PXF24RGB - 24 Bit pro Pixel; 8 Bits pro Grundfarbe RGB.
$GDIP_PXF32RGB - 32 Bit pro Pixel; 8 Bits pro Grundfarbe RGB. Ohne Alphakanal.
$GDIP_PXF32ARGB - 32 Bit pro Pixel; 8 Bits pro Grundfarbe RGB und Alphakanal.
$GDIP_PXF32PARGB - 32 Bit pro Pixel; 8 Bits pro Grundfarbe RGB und Alphakanal, pre-multiplied

 

Rückgabewert

Erfolg: $tagGDIPBITMAPDATA-Struktur
Fehler: @error wird gesetzt

 

Bemerkungen

Wenn keine Notwendigkeit der Sperrung des Bitmap-Bereichs mehr besteht, sollte
durch Aufruf von _GDIPlus_BitmapUnlockBits der Bereich freigegeben werden.

 

Verwandte Funktionen

_WinAPI_DeleteObject, _GDIPlus_ImageGetPixelFormat

 

Siehe auch

Suche in der MSDN Bibliothek nach GdipBitmapLockBits

 

Beispiel


#include <ScreenCapture.au3>
#include <Color.au3>

_GDIPlus_Startup()

$hBmp = _ScreenCapture_Capture("") ; erstelle Screenshot
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp) ; erstelle ein Bitmap aus Screenshot zur Verwendung mit GDI+
_WinAPI_DeleteObject($hBmp) ; lösche Screenshot aus Speicher

_GreyScale($hBitmap, 50, 50, 300, 200) ; Bereich wird in Graustufen umberechnet

$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; erstelle Grafikhandle um auf dem Bitmap zu zeichnen
_GDIPlus_GraphicsDrawRect($hGraphics, 50, 50, 300, 200) ; zeichne Umrandung des ergrauten Bereiches
_GDIPlus_GraphicsDispose($hGraphics) ; gibt Grafikhandle wieder frei

_GDIPlus_ImageSaveToFile($hBitmap, @MyDocumentsDir & "\_GDIPlus_BitmapLockBits.jpg") ; speichere fertiges Bild

_GDIPlus_BitmapDispose($hBitmap) ; lösche Bild aus dem Speicher
_GDIPlus_Shutdown()

Func _GreyScale($hBitmap, $iX, $iY, $iW, $iH)
    Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, $iX, $iY, $iW, $iH, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB)
    Local $Stride = DllStructGetData($BitmapData, "Stride") ; Stride ist der Offset von einer Reihe zur nächsten
    Local $Width = DllStructGetData($BitmapData, "Width") ; Anzahl der Spalten
    Local $Height = DllStructGetData($BitmapData, "Height") ; Anzahl der Reihen
    Local $Scan0 = DllStructGetData($BitmapData, "Scan0") ; Die Bilddaten im Speicher
    Local $PixelData, $Color, $Luma
    For $row = 0 To $Height - 1 ; Reihe für Reihe
        For $col = 0 To $Width - 1 ; Spalte für Spalte
            ; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
            $PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
            $Color = DllStructGetData($PixelData, 1)
            ; berechne Grauwert
            $Luma = _ColorGetRed($Color) * 0.3 + _ColorGetGreen($Color) * 0.59 + _ColorGetBlue($Color) * 0.11
            ; Rot Grün und Blau wert werden jeweils auf den berechneten Grauwert gesetzt
            DllStructSetData($PixelData, 1, BitOR($Luma, BitShift($Luma, -8), BitShift($Luma, -16)))
        Next
    Next
    _GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)
EndFunc   ;==>_GreyScale