Pixel färben?

  • Hallo,

    unzwar ich möchte einen bestimmten Pixel, der zuvor mit Pixelsearch mit den entsprechenden koordinaten übergeben wurde, einfärben. Das soll zu Visualisierungszwecken dienen. Besser wär noch ein gewisser Bereich um den Pixel ( Radius = 3Pixel oder so ähnlich)

    Ich schätz mal das wird nur über die WinApi funktionieren? Oder bietet Autoit eine derartige Funktion?
    Falls nicht, ist es dann überhaupt möglich die Winapi einzubinden? Und Wie?

    GreetZ

  • Hi,
    naja wie du schon sagst WinApi ist gut ... und das beste ist Autoit unterstützt WinApi :D
    Schau mal in der Hilfe da gibt es einige Beispiele dazu.

    PS: In der deutschen Hilfe gibt es das auf ... genau deutsch ;)

    MfG
    Der_Doc

  • Ok dank dir schonmal.
    So ganz komm ich nicht weiter. Ich hab es mir jetz so gedacht: mit _WinAPI_CreateBitmap einen Punkt erzeugen in roter Farbe und mit _WinAPI_MoveWindow diesen Punkt an die von Pixelsearch übergebenen Koordinaten hinbewegen.
    Würde das so gehen?

    Vielleicht könnte mir jemand da nen kleinen Code machen so als Anstoss nach eurer Methode.
    (Zum Beispiel einfach mal als doofes Beispiel: einen Pixel des Reload-Buttons von Firefox suchen und einfärben)

  • Ich habe jetzt noch was in der WinApi gefunden:

    Code
    COLORREF SetPixel
    (
    HDC hdc,       // handle to device context
    int X,         // x-coordinate of pixel
    int Y,         // y-coordinate of pixel
    COLORREF crColor   // pixel color
    )

    Aber das scheint in Autoit nicht vorzukommen. Genau sowas bräuchte ich.


    EDIT: ich ha jetzt noch was gefunden, werd das gleich mal ausprobieren:

    [autoit]

    Func SetPixel ($handle, $x, $y, $color)
    $dc= DllCall ("user32.dll", "int", "GetDC", "hwnd", $handle)
    $setpixel= DllCall ("gdi32.dll", "long", "SetPixel", "long", $dc[0], "long", $x, "long", $y, "long", $color)
    $realesedc= DllCall ("user32.dll", "int", "ReleaseDC", "hwnd", 0, "int", $dc[0])
    EndFunc

    [/autoit]


    EDIT: So gehts!

    2 Mal editiert, zuletzt von Filezilla (28. September 2008 um 20:08)

    • Offizieller Beitrag

    Es gibt auch eine ganz simple Lösung: GUI 1x1 Pixel groß. ;)
    Oder halt in der gewünschten Größe, denn 1x1 ist eh kaum zu sehen. Du kannst die GUI auch noch TOPMOST setzen, damit es auf jeden Fall "oben" ist.

    [autoit]

    Dim $color = 0xFF0000
    HotKeySet("^!e", "_exit")

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

    $GUI_Pixel = GUICreate('', 1, 1, 0, 0, $WS_POPUP)
    GUISetBkColor($color)

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

    Dim $pos[2] = [500,400] ; hier statisch erstellt - im Prog dann: Dim $pos = PixelSearch(...)
    WinMove($GUI_Pixel, "", $pos[0], $pos[1])
    GUISetState(@SW_SHOW, $GUI_Pixel)

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

    While True
    Sleep(100)
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • BugFix : Wobei diese Lösung den schonenden Umgang mit Ressourcen lehrt... ;)

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Die Lösung von BugFix ist auch sehr gut.
    Sie hat den Vorteil das sich der Pixel quasi nur auf der "Bildschirmoberfläche" bewegt.
    Mein Ansatz mit der Funktion SetPixel() färbt tatsächlich den Pixel und bei genügend übergeben Koordinaten würde alles gefärbt^^

    3 Mal editiert, zuletzt von Filezilla (5. Oktober 2008 um 01:26)