Auf bildschirm zeichnen/pixel einfärben

  • hallo Profis,

    Ist es möglich einzelne Pixel auf dem Bildschirm einzufärben?
    Ich möchte das Ergebnis meiner "Berechnung" direkt visuell dargestellt haben. als Pixelmuster über einem bestimmten Bereich es Bildschirms. aber nicht als extra Fenster, ich möchte nämlich an den Pixeln vorbei gucken können.

    Ich hoffe ich konnte mein Problem verständlich Erklären und ihr habt eine Lösung parat.

  • Du kannst keine Suchergebnisse verlinken name22.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hi,
    schau dir mal das Beispiel in der Hilfe an zu _WinAPI_CreatePen(). Statt ein Kreuz auf den Bildschirm zu "malen" geht das natürlich auch mit einzelnen Pixeln....

  • Alternativ hier noch ein Beispiel von mir.

    Starten und mit der Shift-Taste malen.

    Spoiler anzeigen
    [autoit]

    #cs
    GDI+ Example - Draw on Transparent & Click-Through GUI
    by SEuBo, 24.12.2010

    http://www.elitepvpers.de/forum/autoit/9…hirm-malen.html
    #ce

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

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

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

    ;Variablen deklarieren
    Local $hGUI, $hGraphics, $hBitmap, $hBackBuffer, $hPen
    Local $hDLL, $aMPos, $aMPos_New

    [/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,4) ; 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 Sleep(10)
    $aMPos = MouseGetPos()

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

    While _IsPressed(10, $hDLL)
    $aMPos_New = MouseGetPos()
    ;~ If Not IsArray($aMPos) Then $aMPos = $aMPos_New

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

    If $aMPos[0] <> $aMPos_New[0] Or $aMPos[1] <> $aMPos_New[1] Then
    _GDIPlus_GraphicsDrawLine($hBackBuffer, $aMPos[0], $aMPos[1], $aMPos_New[0], $aMPos_New[1],$hPen)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    $aMPos = $aMPos_New
    EndIf
    WEnd
    WEnd

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

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

    [/autoit]