Pixel: was ändert sich auf dem Desktop



  • Hallo Leute,

    ich bin ein absoluter Beginner der sich frisch an c++ heranwagt.
    Daher habe ich vielleicht ein paar für euch banale Fragen.
    Ich hoffe ihr könnt mir dennoch etwas weiterhelfen.

    Ich möchte meinen Desktop auf Änderungen in der Darstellung überwachen.
    Wenn sich also die Maus bewegt, möchte ich wissen wo auf dem Bild farbliche
    Veränderungen zu sehen sind. Diese will ich dann in einer Textdatei festhalten.

    Ich dachte mir dafür folgendes:

    *Handle auf den Desktop holen
    *Größe des Desktop in Höhe und Breite bestimmen
    *in einer Schleife immer wieder mit getpixel überprüfen ob der Wert
    verändert wurde. Wenn ja, dann veränderten RGB-Wert in Textdatei speichern.

    Ich habe bereits einen Handle auf den Desktop, kann nur noch nicht bestimmen
    wie die Größe des Desktop beschaffen ist (inkl. Taskleiste).

    An der Schleife zum Abfragen welcher Pixel sich ändert bin ich noch dran.
    Wobei ich mir nicht sicher bin ob ich dann dafür ein Array verwenden sollte,
    oder wie ich die neuen und alten Pixeldaten denn am besten vergleiche und ob
    das nicht evtl. zu systemlastig sein könnte?

    Soweit zu meinem Vorhaben. Habt ihr dazu Ideen?



  • Größe des Desktop:
    GetSystemMetrics(SM_CXSCREEN) und GetSystemMetrics(SM_CYSCREEN) oder so...

    GetPixel() ist sau-lahm 😉

    Schnellere Möglichkeit evtl. (ungetestet):
    - ne DIB erzeugen
    - den Desktop auf die DIB blitten
    - Auf die Pixel des DIBs direkt zugreifen



  • Hallo geeky,

    evtl. stelle ich mich etwas doof an, aber ich habe bisher noch nicht
    mit Bitmaps oder DIBs gearbeitet. Hast du ein paar Links zu meinem
    Vorhaben die mir helfen könnten?

    Wie ermittel ich dann zu dem DIB die RGB-Werte?



  • DIB ist quasi genau das Format was die *.bmp-Datei verwendet.
    z.B. mittels CreateDIBSection() kriegt man eine Bitmap, auf dessen Pixel man direkt via Pointer zugreifen kann. Das von der Funktion zurückgelieferte HBITMAP-Handle, lässt sich auch mit den normalen GDI-Funktionen (BitBlt() etc.) nutzen.

    Die Forensuche musste dazu eigentlich was ausspucken. Ansonsten lässt sich auch bei codeproject, etc. was darüber finden.

    Aber bei den DIBs gibt es ein paar Fallstricke (z.B. die Reihenfolge der Farben, die Parameter der DIB-Funktionen sind nicht ganz simpel, Padding des Pixeldaten...)
    Ich würde erstmal mit GetPixel() arbeiten und wenn das klappt und mehr Performance denn überhaupt nötig ist, die DIB-Methode probieren...



  • Wie macht ihr das mit dem getpixel? Wie kommt ihr an jeden Pixel ran?
    Macht ihr ne "for" und zählt x und y unabhängig voneinander hoch,
    bis beide die größe der höhe und breite vom bildschirm haben?
    Wie speicherst du die ganzen werte für z.b. 1024x768 zwischen?
    Sind dafür sowas wie die array da?


Anmelden zum Antworten