GetPixel() - Alternative



  • Hallo,
    ich habe folgendes Problem:
    Ich möchte einen Pixel im Bildschirm überwachen.
    Wenn dieser sich grün färbt, soll mein Programm das möglichst schnell mitkriegen (10-15ms bereich... )

    Das Problem ist nur GetPixel()ist zu lahm :<
    Ich habe gehört man kann auch den Screen saven und dan die Pixel auslesen, aber
    ist das wirklich schneller? Vorallem, weil es sich nur um einen Pixel handelt.

    Hoffe ihr habt eine Idee dazu
    mfg Kenny



  • Lag nicht an der Funktion sondern an der Verarbeitung der ixel Informationen..
    Trotzdem würde es mich interesieren ob die andere Methode schneller ist



  • Nein



  • GDI Pixel Operationen sind wirklich extrem langsam, aber das läuft ja auch über unzählige Abstraktionsschichten.
    Ob ein BitBlt() eines kleineren Bereichs schneller abläuft, als GetPixel ist unter Umständen vielleicht sogar möglich, aber das müsstest du testen. Womöglich kannst du einen 8x8 Pixel Bereich in eine kompatible Bitmap übertragen und die Farbe deines gewünschten Pixels schneller auslesen als GDI ...

    Alternativ fallen mir nur 2 Möglichkeiten ein:
    OpenGL arbeitet näher an der Hardware und kann auch Screenshots anlegen -> also vielleich auch hier wieder nur einen Teilbereich des Schirms extrahieren und deinen Pixel lesen.

    Zuletzt kannst du einen Mirror-Treiber für die Grafik schreiben, wie das Remote-Desktop und einige VNC Server tun ... der Zugriff ist dann sicher schnell ... aber der Aufwand ist enorm.

    ... ich frage mich ja schon, was das für ein Programm ist, dass bei einer ganz bestimmten Pixelfarbe Code auslöst 😃
    Vielleicht lässt sich dein Problem z.B. mit SetWinEventHook() eleganter lösen, als wenn du kontinuierlich einen Pixel abfragst



  • Also ich musste dabei sofort an Yeti Sports: Penguin Toss denken.
    Wobei man dort natürlich nicht unbedingt auf eine exakte Farbe triggert (und schon gar nicht auf grün), sondern einfacherweise auf jede Farbänderung des Pixels.
    Funktioniert aber ganz gut.


Anmelden zum Antworten