[GDI+] Transparent "zeichnen" auf auf ein Bmp32 - Andy?

  • Hey
    Ich möchte auf ein Bmp32 den Hintergrund transparent machen. Das ausgeklammerte habe ich extra nicht benutzt, da es nicht so richtig funktioniert..
    Hier das Skript:

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;Variablen deklarieren
    Global $hGUI, $hGraphics, $hBitmap, $hBackBuffer, $hPen
    Global $hDLL, $Pos, $_Pos[2]

    [/autoit] [autoit][/autoit] [autoit]

    ;GDI+ initialisieren, DLL für _IsPressed öffnen und ESC als HotKey festlegen
    _GDIPlus_Startup()
    $hDLL = DllOpen("user32.dll")
    HotKeySet("{ESC}","_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    ;Transparente GUI erstellen
    $hDummy = GUICreate("") ; Dummy GUI, damit richtiges nicht in Taskleiste auftaucht.
    $hGUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST,$WS_EX_TRANSPARENT),$hDummy)
    GUISetBkColor(0xABCDEF, $hGUI)
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF, 255)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Graphic-Objekt, Pinsel und Backbuffer erstellen und GUI anzeigen
    $hPen = _GDIPlus_PenCreate(0xFFFF0000,3) ; Roten Pinsel mit Breite von 4 px.
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphics)
    $hBackBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $Pos = MouseGetPos()
    If $Pos[0]<>$_Pos[0] And $Pos[1]<>$_Pos[1] then
    ;GUISetBkColor(0xABCDEF, $hGUI)
    ;$_hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphics)
    ;$_hBackBuffer = _GDIPlus_ImageGetGraphicsContext($_hBitmap)
    ;_GDIPlus_GraphicsDrawLine($_hBackBuffer, 50, 50, $Pos[0], $Pos[1],$hPen)
    ;_GDIPlus_GraphicsDrawImage($hGraphics, $_hBitmap, 0, 0)
    ;_GDIPlus_ImageDispose($_hBackBuffer)
    ;_GDIPlus_BitmapDispose($_hBitmap)

    [/autoit] [autoit][/autoit] [autoit]

    Local $_ptr,$_hbmp
    $_hDC = _Bmp32_Create(@DesktopWidth,@DesktopHeight,$_ptr,$_hbmp)
    $_hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($_hbmp)
    $_hBackBuffer = _GDIPlus_ImageGetGraphicsContext($_hBitmap)
    _GDIPlus_GraphicsDrawLine($_hBackBuffer, 50, 50, $Pos[0], $Pos[1],$hPen)
    _GDIPlus_GraphicsDrawImage($hGraphics, $_hBitmap, 0, 0)
    _GDIPlus_ImageDispose($_hBackBuffer)
    _Bmp32_Delete($_hDC,$_hbmp)
    $_Pos=$Pos
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_PenDispose($hPen)
    GUIDelete($hGUI)
    DLLClose($hDLL)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    _Bmp32 Funks von Andy
    Umbenannt von mir
    #ce
    Func _Bmp32_Delete($hDC, $hbmp)
    _WinAPI_DeleteObject($hbmp)
    _WinAPI_ReleaseDC(0, $hDC)
    EndFunc ;==>_Delete_Bitmap32

    [/autoit] [autoit][/autoit] [autoit]

    Func _Bmp32_Create($iWidth, $iHeight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, "Width", $iWidth)
    DllStructSetData($tBMI, "Height", -$iHeight) ;minus =standard = bottomup
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    ;_arraydisplay($adib)
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit]


    Danke für eure Hilfe :thumbup:
    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

    Einmal editiert, zuletzt von AntiSpeed (20. Februar 2011 um 11:47)

  • Erstell doch aus dem Gerätekontext mit der Bitmap eine GDI+ Grafik. Dann kannst du mit _GDIPlus_GraphicsClear die Bitmap transparent setzen. Somit musst du auch nicht jedesmal eine neue Bitmap erstellen. ;)

    [autoit]

    $hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC_Bitmap)
    _GDIPlus_GraphicsClear($hGraphics, 0x00000000)

    [/autoit]
  • Wie du meins funktioniert nicht:

    [autoit]

    Local $_ptr,$_hbmp
    $_hDC = _Bmp32_Create(@DesktopWidth,@DesktopHeight,$_ptr,$_hbmp)
    $_hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($_hbmp)
    $_hGraphics = _GDIPlus_GraphicsCreateFromHDC($_hDC)
    _GDIPlus_GraphicsClear($hGraphics, 0x00000000)
    $_hBackBuffer = _GDIPlus_ImageGetGraphicsContext($_hBitmap)
    _GDIPlus_GraphicsDrawLine($_hGraphics, 50, 50, $Pos[0], $Pos[1],$hPen)
    _GDIPlus_GraphicsDrawImage($hGraphics, $_hBitmap, 0, 0)
    _GDIPlus_GraphicsDispose($_hGraphics)
    _Bmp32_Delete($_hDC,$_hbmp)

    [/autoit]


    Weil mit 0x000000 kann ich zB einen scharzen Stricht nicht "ausradieren" und den Bg transparent setzen - da du ja Transparents drüber setzt bleibt der Strich ^^ .

    Nur keine Hektik - das Leben ist stressig genug

  • Die GDIPlus Funktionen sind in der Beziehung Dumm.

    Benutze einfach BitBlt mit hdc´s
    Dann machst du 2 Backbuffer.

    Den untersten versiehst du z.B. mit einem Bild und den Oberen zeichnest du drüber.
    Den oberen kannst du Transparent machen mit GraphicsClear. (Also wenn man die Graphic geholt hat vom hdc)

    Wenns nicht geht etwas rumprobieren.
    Das problem taucht immer wieder auf.^^
    Ich hab jetzt keine Lust mehr ein Funktionierendes Beispiel zu machen.
    Wenn morgen nachmittag keine Lösung da ist mach ichs vllt wenn ich daran denke.

    lg

  • Hey
    Danke erstmal. Ich habe jetzt folgendes Skript, das aber irgendwie nicht funktioniert. Wahrscheinlich habe ich einen Parameter falsch angegeben. Guckt bitte mal drüber. Es soll der Strich mit der Farbe 0xFF0000 (Rot) noch übrig bleiben:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;Variablen deklarieren
    Global $hGUI, $hGraphics, $hBitmap, $hBackBuffer, $hPen
    Global $hDLL, $Pos, $_Pos[2]

    [/autoit] [autoit][/autoit] [autoit]

    ;GDI+ initialisieren, DLL für _IsPressed öffnen und ESC als HotKey festlegen
    _GDIPlus_Startup()
    $hDLL = DllOpen("user32.dll")
    HotKeySet("{ESC}","_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    ;Transparente GUI erstellen
    $hDummy = GUICreate("") ; Dummy GUI, damit richtiges nicht in Taskleiste auftaucht.
    $hGUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST,$WS_EX_TRANSPARENT),$hDummy)
    GUISetBkColor(0xABCDEF, $hGUI)
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF, 255)

    [/autoit] [autoit][/autoit] [autoit]

    ;Graphic-Objekt, Pinsel und Backbuffer erstellen und GUI anzeigen
    $hPen = _GDIPlus_PenCreate(0xFFFF0000,3) ; Roten Pinsel mit Breite von 4 px.
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphics)
    $hBackBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $Pos = MouseGetPos()
    If $Pos[0]<>$_Pos[0] And $Pos[1]<>$_Pos[1] then
    Local $_ptr,$_hbmp
    $_hDC = _Bmp32_Create(@DesktopWidth,@DesktopHeight,$_ptr,$_hbmp)
    $_hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($_hbmp)
    ;_GDIPlus_GraphicsClear($hGraphics, 0x00000000)
    $_hBackBuffer = _GDIPlus_ImageGetGraphicsContext($_hBitmap)
    _GDIPlus_GraphicsDrawLine($_hBackBuffer, 50, 50, $Pos[0], $Pos[1],$hPen)
    $hDestDC=_GDIPlus_GraphicsGetDC($hGraphics)
    _WinAPI_TransparentBlt($hDestDC, 0, 0, @DesktopWidth, @DesktopHeight, $_hDC, 0, 0, @DesktopWidth, @DesktopHeight, "FF0000")
    _GDIPlus_GraphicsDrawImage($hGraphics, $_hBitmap, 0, 0)
    _GDIPlus_ImageDispose($_hBackBuffer)
    _GDIPlus_GraphicsReleaseDC($hGraphics,$hDestDC)
    _Bmp32_Delete($_hDC,$_hbmp)
    $_Pos=$Pos
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_PenDispose($hPen)
    GUIDelete($hGUI)
    DLLClose($hDLL)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    _Bmp32 Funks von Andy
    Umbenannt von mir
    #ce
    Func _Bmp32_Delete($hDC, $hbmp)
    _WinAPI_DeleteObject($hbmp)
    _WinAPI_ReleaseDC(0, $hDC)
    EndFunc ;==>_Delete_Bitmap32

    [/autoit] [autoit][/autoit] [autoit]

    Func _Bmp32_Create($iWidth, $iHeight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, "Width", $iWidth)
    DllStructSetData($tBMI, "Height", -$iHeight) ;minus =standard = bottomup
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    ;_arraydisplay($adib)
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit]


    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

  • Bei mir passiert nix, wenn ich das Skript ausführe.
    Deshalb kann ichs auch nicht bearbeiten, dass es richtig Funktioniert.

    Wenn du Volle Transparenz haben willst musst du AlphaBlend nutzen.

    [autoit]

    Func _GDI_AlphaBlend_GetStruct($Alpha = 255)
    Local $struct = DllStructCreate($tagBLENDFUNCTION)
    DllStructSetData($struct, 1, 0) ; 0 = AC_SRC_OVER
    DllStructSetData($struct, 2, 0) ; 0 "Must be Zero"
    DllStructSetData($struct, 3, $Alpha) ; Alpha fürs ganze Bild
    DllStructSetData($struct, 4, 1) ; 1 = Bild enthält einen Alphakanal
    Local $data = DllStructCreate("dword", DllStructGetPtr($struct))
    $data = DllStructGetData($data, 1)
    Return $data
    EndFunc ;==>_GDI_AlphaBlend_GetStruct

    [/autoit][autoit][/autoit][autoit]

    Func _GDI_AlphaBlend($hDCDest, $nXOriginDest, $nYOriginDest, $nWidthDest, $nHeightDest, $hDCSrc, $nXOriginSrc, $nYOriginSrc, $nWidthSrc, $nHeightSrc, $blendFunction)
    DllCall($h_MSIMG32_DLL, 'int', 'AlphaBlend', _
    'ptr', $hDCDest, _ ; // handle to destination DC
    'int', $nXOriginDest, _ ; // x-coord of upper-left corner
    'int', $nYOriginDest, _ ; // y-coord of upper-left corner
    'int', $nWidthDest, _ ; // destination width
    'int', $nHeightDest, _ ; // destination height
    'ptr', $hDCSrc, _ ; // handle to source DC
    'int', $nXOriginSrc, _ ; // x-coord of upper-left corner
    'int', $nYOriginSrc, _ ; // y-coord of upper-left corner
    'int', $nWidthSrc, _ ; // source width
    'int', $nHeightSrc, _ ; // source height
    'dword', $blendFunction);$blendFunction) ; // alpha-blending function
    EndFunc ;==>_GDI_AlphaBlend

    [/autoit]

    die Blend Func als Eingabewert ist der Rückgabewert der GetStruct func.

    lg
    Mars(i)

  • Why bennenst du die Funcs um und schreibst nicht dazu wie sie funktionieren? -> bitte unqualifizierte Beiträge sein lassen und sonst wenns funktioniert bitte bei sowas ein bsp oder richtig erklären. Danke
    Die Funcs sind normalerweise aus der WinAPIEx.au3 und haben auch andere Parameter !?

    Mit Alpha Blend funktionierts genau so wenig.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;Variablen deklarieren
    Global $hGUI, $hGraphics, $hBitmap, $hBackBuffer, $hPen
    Global $hDLL, $Pos, $_Pos[2]

    [/autoit] [autoit][/autoit] [autoit]

    ;GDI+ initialisieren, DLL für _IsPressed öffnen und ESC als HotKey festlegen
    _GDIPlus_Startup()
    $hDLL = DllOpen("user32.dll")
    HotKeySet("{ESC}","_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    ;Transparente GUI erstellen
    $hDummy = GUICreate("") ; Dummy GUI, damit richtiges nicht in Taskleiste auftaucht.
    $hGUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST,$WS_EX_TRANSPARENT),$hDummy)
    GUISetBkColor(0xABCDEF, $hGUI)
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF, 255)

    [/autoit] [autoit][/autoit] [autoit]

    ;Graphic-Objekt, Pinsel und Backbuffer erstellen und GUI anzeigen
    $hPen = _GDIPlus_PenCreate(0xFFFF0000,3) ; Roten Pinsel mit Breite von 4 px.
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphics)
    $hBackBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    #cs
    $Pos = MouseGetPos()
    If $Pos[0]<>$_Pos[0] And $Pos[1]<>$_Pos[1] then
    Local $_ptr,$_hbmp
    $_hDC = _Bmp32_Create(@DesktopWidth,@DesktopHeight,$_ptr,$_hbmp)
    $_hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($_hbmp)
    ;_GDIPlus_GraphicsClear($hGraphics, 0x00000000)
    $_hBackBuffer = _GDIPlus_ImageGetGraphicsContext($_hBitmap)
    _GDIPlus_GraphicsDrawLine($_hBackBuffer, 50, 50, $Pos[0], $Pos[1],$hPen)
    $hDestDC=_GDIPlus_GraphicsGetDC($hGraphics)
    _WinAPI_TransparentBlt($hDestDC, 0, 0, @DesktopWidth, @DesktopHeight, $_hDC, 0, 0, @DesktopWidth, @DesktopHeight, "FF0000")
    _GDIPlus_GraphicsDrawImage($hGraphics, $_hBitmap, 0, 0)
    _GDIPlus_ImageDispose($_hBackBuffer)
    _GDIPlus_GraphicsReleaseDC($hGraphics,$hDestDC)
    _Bmp32_Delete($_hDC,$_hbmp)
    $_Pos=$Pos
    EndIf
    #ce
    $Pos = MouseGetPos()
    If $Pos[0]<>$_Pos[0] And $Pos[1]<>$_Pos[1] then
    Local $_ptr,$_hbmp
    $_hDC = _Bmp32_Create(@DesktopWidth,@DesktopHeight,$_ptr,$_hbmp)
    $_hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($_hbmp)
    ;_GDIPlus_GraphicsClear($hGraphics, 0x00000000)
    $_hBackBuffer = _GDIPlus_ImageGetGraphicsContext($_hBitmap)
    _GDIPlus_GraphicsDrawLine($_hBackBuffer, 50, 50, $Pos[0], $Pos[1],$hPen);davor nicht
    $hDestDC=_GDIPlus_GraphicsGetDC($hGraphics)
    ;$Alpha_Structure=_WinAPI_AlphaBlend_GetStruct(255)
    _WinAPI_AlphaBlend($hDestDC, 0, 0, @DesktopWidth, @DesktopHeight, $_hDC, 0, 0, @DesktopWidth, @DesktopHeight,0,False)
    _GDIPlus_GraphicsDrawLine($_hBackBuffer, 50, 50, $Pos[0], $Pos[1],$hPen);danach funktionierts auch nicht
    _GDIPlus_GraphicsDrawImage($hGraphics, $_hBitmap, 0, 0)
    _GDIPlus_ImageDispose($_hBackBuffer)
    _GDIPlus_GraphicsReleaseDC($hGraphics,$hDestDC)
    _Bmp32_Delete($_hDC,$_hbmp)
    $_Pos=$Pos
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_PenDispose($hPen)
    GUIDelete($hGUI)
    DLLClose($hDLL)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    _Bmp32 Funks von Andy
    Umbenannt von mir
    #ce
    Func _Bmp32_Delete($hDC, $hbmp)
    _WinAPI_DeleteObject($hbmp)
    _WinAPI_ReleaseDC(0, $hDC)
    EndFunc ;==>_Delete_Bitmap32

    [/autoit] [autoit][/autoit] [autoit]

    Func _Bmp32_Create($iWidth, $iHeight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, "Width", $iWidth)
    DllStructSetData($tBMI, "Height", -$iHeight) ;minus =standard = bottomup
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    ;_arraydisplay($adib)
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit]


    Wer davon Ahnung hat bitte schreiben :thumbup:
    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

  • Ersetze mal in deinem Code vom ersten Beitrag die Zeilen 15-19 mit

    [autoit]


    ;Transparente GUI erstellen
    $hDummy = GUICreate("") ; Dummy GUI, damit richtiges nicht in Taskleiste auftaucht.
    $hGUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST,$WS_EX_TRANSPARENT),$hDummy)
    GUISetBkColor(0x0, $hGUI)
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0x0, 255)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi,
    bei meinen ersten Tests von Bitblt() und Transparentblt() habe ich noch Linien- und Kreisfunktionen (und Spiralen) "zu Fuss" in eine Bitmap (als Datei!) gezeichnet, und diese dann auf bewegten Hintergrund geblittet.
    Vielleicht braucht ja jemand mal eine (Voll-)Kreisfunktion oder eine Linie^^
    autoit.de/wcf/attachment/12645/