Pixel auslesen ohne GetPixel



  • Hallo,

    was ist die schnellste Möglichkeit die Pixel einer bestimmten Farbe auf dem aktuellen Desktop ausfindig zu machen? GetPixel ist mir dafür zu langsam. Welche Möglichkeit habe ich noch?



  • Es gibt in C++ weder einen Desktop, noch Pixel. Frag doch im jeweiligen Unterforum (OS oder API/Toolkit) nach.



  • Registrierter Troll schrieb:

    Es gibt in C++ weder einen Desktop, noch Pixel. Frag doch im jeweiligen Unterforum (OS oder API/Toolkit) nach.

    Schon wieder falsches Forum. Irgendwie sollte ich morgens mehr Kaffee vorm posten zu mir nehmen. Logischerweise sollte das hier ins WinAPI Forum. Sorry.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ScanLine?



  • _Luckie schrieb:

    ScanLine?

    Soll dass eine Funktion sein? Sry, aber mir ist zwar durchaus bekannt, was ein ScanLine-Algorithmus ist, aber eine passende Funktion finde ich dazu nicht.



  • FrEEzE2046 schrieb:

    GetPixel ist mir dafür zu langsam.

    Wenn das so ist, dann stimmt Dein Ansatz bzw. der Konzept nicht!

    Warum soll diese Funktion Deiner Meinung nach zu langsam sein?
    Mußt Du ständige Pixelwerte auslesen?
    Welche Pixel?
    Einen bestimmten Pixel?
    Oder doch einen größeren rechteckigen Bereich?



  • Ich muss einen Variablen Bildschirmbereich scannen und alle RGB Werte in einem ListView anzeigen. Zudem soll die selektierte Farbe bei einem Klick auf das Listview Element auf dem Desktop sichtbar gemacht werden.

    Und ja: Ich muss den ausgewählten Bereich ständig scannen





  • geeky schrieb:

    http://msdn.microsoft.com/en-us/library/dd144879(VS.85).aspx

    Kann mir jemand sagen wie ich mein eigenes Fenster transparent halte? Momentan mache ich das wie folgt:

    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_CREATE:
            {
    			SendMessage(hwnd, WM_ERASEBKGND, 0, 0);
            } break;
    
    		case WM_ERASEBKGND:
    		{
    			return TRUE;
    		} break;
        }
    
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    Das Problem: Der "Hintergrund" den man jetzt durchsehen kann aktualisiert sich nicht. Wenn ich das Fenster minimiere und wieder maximiere wird der Hintergrund wieder aktualisiert.

    Wie kann ich das von Hand machen?



  • FrEEzE2046 schrieb:

    _Luckie schrieb:

    ScanLine?

    Soll dass eine Funktion sein? Sry, aber mir ist zwar durchaus bekannt, was ein ScanLine-Algorithmus ist, aber eine passende Funktion finde ich dazu nicht.

    Ach Mist, das ist ja eine VCL Funktion.



  • _Luckie schrieb:

    Ach Mist, das ist ja eine VCL Funktion.

    Nicht schlimm, nur leider kann ich mit einer Borland C++ IDE nicht dienen. Da ich hin und wieder auch in Delphi programmiere dachte ich es mir aber schon fast 😉

    Mittlerweile habe ich eine Lösung für mein Problem gefunden. Wenn ich Zeit habe poste ich sie noch mal hier.

    Hast du vielleicht einen Lösungsvorschlag bzgl. des transparenten Fensters?



  • FrEEzE2046 schrieb:

    Ich muss einen Variablen Bildschirmbereich scannen und alle RGB Werte in einem ListView anzeigen.

    Bist Du Dir da sicher daß es aus Performancegründen an GetPixel() liegt?
    Mein Bauch sagt mir, daß das ständige Aktualisieren des ListViews der eigentlich Flaschenhals ist... 😮

    Martin



  • FrEEzE2046 schrieb:

    Nicht schlimm, nur leider kann ich mit einer Borland C++ IDE nicht dienen. Da ich hin und wieder auch in Delphi programmiere dachte ich es mir aber schon fast 😉

    Bei mir ist es genau umgekehrt, eigentlich bin ich Delphi Entwickler.



  • Mmacher schrieb:

    FrEEzE2046 schrieb:

    Ich muss einen Variablen Bildschirmbereich scannen und alle RGB Werte in einem ListView anzeigen.

    Bist Du Dir da sicher daß es aus Performancegründen an GetPixel() liegt?
    Mein Bauch sagt mir, daß das ständige Aktualisieren des ListViews der eigentlich Flaschenhals ist... 😮

    Ja bin ich, da ich die ListView natürlich nur am Ende aktualisiere und die Zeit vorher messe.

    Außerdem:
    Es wird einmalig eine ListView für den Bildschirmbereich angelegt. Das ständige "aktualisieren" nachher, aktualisiert NICHT mehr die ListView ...

    _Luckie schrieb:

    Bei mir ist es genau umgekehrt, eigentlich bin ich Delphi Entwickler.

    ^^


Log in to reply