Farbe erkennen?



  • Kann mir bitte wer auf die Frage antworten? Dank "Finn@OnTheWay" wird hier nur noch diskutiert in welches forum es gehört 😣 Danke wer auch immer du bist 😞



  • Hi,

    Das getPixel was du dort angegeben hast ist nur ein Funktions-Prototyp. Du mußt die Funktion wie SetCursorPos benutzen, mit dem Unterschied das als erster Parameter noch der Zeichenkontext hinzukommt. Dafür wird es eine weitere Funktion geben.

    PS1 in einem Symbol-Namen sollten bzw dürfen keine Umlaute stehen
    PS2 es ist auch keine gute Idee eine Variable wie eine Funktion zu nennen, mit hoher Wahrscheinlichkeit wird dies schief gehen unter C muß es sogar schief gehen.



  • Kann ich GetPixel denn dann einfach in einer abfrage wie

    if(GetPixel = irgendeine Farbe)
    {
        ...
    

    benutzen?Oder muss ich dann das in ne Variable speichern?



  • Finn schrieb:

    if(GetPixel = irgendeine Farbe)
    {
        ...
    

    Schreibfehler oder Unwissenheit? Dat muß heissn:

    if(GetPixel == irgendeine Farbe)
    {
        ...
    


  • Schreibfehler! 😉



  • Finn schrieb:

    Kann mir bitte wer auf die Frage antworten?

    ich habs ausprobiert und es klappt. ich habe dazu das gui-framework Qt (C++) verwendet (den ansatz mit GetPixel/SetCursorPos habe ich so aber übernommen).

    hier mal die vorgehensweise:
    [0.] ich habe mir ein fenster erstellt, das ein lineedit sowie einen button besitzt. man schreibt also den namen der farbe (red, blue, etc. oder html: #ABCDEF, #00ff00) in das lineedit-feld und clickt auf den button, um die suche zu starten.
    1. Du benötigst den DC des desktops (bei Qt geht das innerhalb von 2 zeilen code).
    2. man liest die abmessungen des desktops aus. (w/width und h/height.)
    3. mithilfe zweier for-schleifen liest man alle pixel aus, bis der aktuelle pixel bei (x, y) die gesuchte farbe hat (break!).
    4. jetzt kannst du den maus-cursor mittels SetCursorPos nach (x, y) verschieben.

    aber: mit diesem ansatz dauert es eeeeeewig den ganzen bilschirm abzusuchen! (wobei C/WinAPI ggü. C++/Qt sicher schneller ist.)

    PS: fallls du interesse an dem code hast, kannst dich ja mal melden.
    PPS: ich empfehle dir auf ein vernünftiges gui-framwork umzusteigen, ansonsten hast du bestimmt bald genug von gui-programmierung!



  • ich halte nichts von dieser haudrauf methode. jeden pixel auf dem desktop analysieren und das am besten noch mehrmals in der sekunde, auch eine möglichkeit die wohnung zu beheizen!σ_σ



  • Folker Frickler schrieb:

    ich halte nichts von dieser haudrauf methode. jeden pixel auf dem desktop analysieren

    Finn wollte ja den Desktop nach einer bestimmten Farbe absuchen. und da es keine vorgefertigte funktion gibt muss man wohl pixel für pixel vorgehen...

    und das am besten noch mehrmals in der sekunde

    jeden pixel, und das mehrmals pro sekunde 😮
    ich hab mir zu testzwecken mal den wert (x * y) / (w * h) - also quasi den fortschritt - anzeigen lassen. bis man überhaupt bei 1 promille angekommen ist, vergehen sekunden und minuten...

    @Finn: wenn du den cursor damit auf ein bestimmtes fenster setzten willst oder was auch immer, solltest du besser ein anderes suchmuster verwenden, bspw. diagonal, quer, zick-zack, etc. und den wert immer im abstand von 50 pixeln oder so abfragen.



  • Ich würd den Desktop als Bitmap in ein Array speichern und darüber meine Schleife laufen lassen. So sparst du dir den Funktionsaufruf von GetPixel, der einen sicher nicht zu unterschätzenden Overhead mit sich bringt.



  • scherzkeks schrieb:

    Folker Frickler schrieb:

    ich halte nichts von dieser haudrauf methode. jeden pixel auf dem desktop analysieren

    Finn wollte ja den Desktop nach einer bestimmten Farbe absuchen. und da es keine vorgefertigte funktion gibt muss man wohl pixel für pixel vorgehen...

    und das am besten noch mehrmals in der sekunde

    jeden pixel, und das mehrmals pro sekunde 😮
    ich hab mir zu testzwecken mal den wert (x * y) / (w * h) - also quasi den fortschritt - anzeigen lassen. bis man überhaupt bei 1 promille angekommen ist, vergehen sekunden und minuten...

    @Finn: wenn du den cursor damit auf ein bestimmtes fenster setzten willst oder was auch immer, solltest du besser ein anderes suchmuster verwenden, bspw. diagonal, quer, zick-zack, etc. und den wert immer im abstand von 50 pixeln oder so abfragen.

    Deshalb benutzt man für sowas auch eine Graphik Bibliothek, die das direkt auslesen des Videospeichers ermöglicht!



  • Naja mal schaun was ich damit anfangen kann! Danke an alle! 🙂


Anmelden zum Antworten