Desktop-Pixel auslesen und vergleichen



  • Hallo Community,

    ich möchte einen bestimmten Bereich meines Desktops nach einer bestimmten
    Pixelfarbe (Pixel) in sich wiederholenden Abständen durchsuchen lassen. Das
    Ganze soll im Hintergrund laufen und sowenig wie möglich die Performance des
    Systems (habe WinXP Prof) belasten. Man muss bedenken das z.B. bei einem
    Bereich von 200 Pixel breit und 300 Pixel hoch schon insgesamt 60000 Pixel
    angeschaut und verglichen werden müssen. Darum ist es mir wichtig dass die
    Lösung besonders schnell und somit gut im Hintergrund laufen kann.

    Hier mal der Ablauf in einfachen Worten gefasst:

    // Variable deklariern
    gesuchtePixelfarbe = Farbwert (z.B. 65565)

    // Bereich (Kooridnaten) definieren
    HöheAnfangspunkt = 100
    BreiteAnfangspukt = 100
    HöheEndpunkt = 300
    BreiteEndpunkt = 200

    // Bereich permanent (z.B. While-Schleife) durchlaufen und jedes Pixel
    // mit gesuchter Pixelfarbe vergleichen und wenn gefunden dann Aktion
    // (z.B. einen Zähler erhöhen) ausführen.
    while(1==1) {durchsuche Bereich, vergleiche und mach Aktion wenn gefunden}

    Schön wäre es wenn jemand ein Code-Beispiel weiss. Das ist für mich immer
    am anschaulichsten. Ansonsten danke ich euch im voraus für jede Hilfe.

    Gruss, rommi



  • Such mal hier im Forum nach BitBlt, Screenshot, Desktop. Da wirst du garantiert fündig (hab grad keinen Link zur Hand). Du holst dir den gewünschten Bereich, packst den z.B. in ein Bitmap und suchst nach deiner Farbe. Einen Pointer auf die Bilddaten bekommst du bei CBitmap über die Eigenschaft Scan0, wenn ich mich nicht irre.

    P.S.: Versuchs erst gar nicht mit GetPixel! 😉

    P.P.S.: Eine weitere Möglichkeit wäre sicher, über DirectX zu gehen, aber dazu kann ich dir nix sagen...



  • Hallo Matze,

    danke für den Such-Hinweis! Werde mal nach den vorgeschlagenen Wörtern suchen.

    Gruss, rommi



  • Es müsste doch auch per DirectDraw möglich sein, indem man die Werte aus dem Frame Buffer holt !?


Anmelden zum Antworten