Laden...

Wie kann ich einen Pixel vom Desktop auslesen und Abweichungen berücksichtigen?

Erstellt von TheGateway vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.008 Views
T
TheGateway Themenstarter:in
12 Beiträge seit 2020
vor 3 Jahren
Wie kann ich einen Pixel vom Desktop auslesen und Abweichungen berücksichtigen?

Hi,

ich habe eine Frage,

ich lese Pixel vom Desktop aus, aus einem Programm mit folgender Klasse

        public bool CheckPixelColor(string hexcode, int x, int y)
        {


            //moveMouse(x, y);
            Task.Delay(500);
            //für einen Moitor
            // Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

            //für 2 Monitore
            Bitmap bitmap = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);

            Graphics graphics = Graphics.FromImage(bitmap as Image);

            graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);

            Color desiredPixelColor = ColorTranslator.FromHtml(hexcode);

            
            
                    Color currentPixelColor = bitmap.GetPixel(x, y);
                    if (desiredPixelColor == currentPixelColor)
                    {

                        listBox1.Items.Add(String.Format("Pixel gefunden at {0},{1} ", x, y));
                        //wenn gefunden mace dies
                        return true;
                    }
                    else
                    {
                string strHtmlColor = System.Drawing.ColorTranslator.ToHtml(currentPixelColor);
                listBox1.Items.Add(String.Format("Pixel NICHT at {0},{1} -> " + strHtmlColor, x, y));
                        return false;
                    }

      
           // GetPixel(Cursor.Position);
          
        }

Das funktioniert sehr gut WENN der Hex genau übereinstimmt, leider sind die Pixel nicht immer 100 % gleich sondern haben geringe abweichungen, wie zum Beispiel #FFFFFF wird gesucht und #FFFFFA ist es nun.

Wie könnte man damit umgehen eine kleine abweichung mit einzukalkulieren?!

Wäre es sinnvoller ein Bild zu erstellen und dies suchen zu lassen?

Lg

4.931 Beiträge seit 2008
vor 3 Jahren

Der Farbabstand wird im deutschen Delta E genannt und z.B. mittels des euklidischen Abstandes (der RGB-Werte) könntest du die Genauigkeit festlegen.

Du solltest aber dann direkt Color übergeben (und keinen Hexcode-String).

T
TheGateway Themenstarter:in
12 Beiträge seit 2020
vor 3 Jahren

besteht den die Möglichkeit von dem gesuchten ein ein Bild zu machen und den desktop danach durchsuchen zu lassen?

4.931 Beiträge seit 2008
vor 3 Jahren

Du legst doch schon mittels graphics.CopyFromScreen(...) einen Screenshot an (und hast dann in bitmap das Bild).
Und mittels bitmap.GetPixel(x, y) greifst du ja schon auf einen einzelnen Pixel zu -> darum kannst du selbstverständlich auch eine Schleife packen.

Du solltest nicht einfach so etwas (aus dem Internet) kopieren, ohne es zu verstehen.

Was ist denn dein genaues Ziel?

T
TheGateway Themenstarter:in
12 Beiträge seit 2020
vor 3 Jahren

ich verstehe schon was mein code da veranstaltet, aber ich kann keinen zusammenhang zu meinem vorhaben herstellen... bzw wie ich es realsieren könnte. Die farbwerte auslesen und vergleichen ist ja wie beschrieben kein Problem.

Ich habe ein Programm, in dem Texte angezeigt werden, ABER mit leichter transparenz. Das heisst das zB #00000 auch zu #0000FF werden kann, also mit abweichungen. Mein vorhaben war es dies mit einzukalkulieren, ob dies dann passt ist auch fraglich.

Wäre es den machbar und oder sinnvoll von dem gesuchten Text ein Screenshot zu machen und dies auf dem Desktop zu suchen und nicht einzelne Pixel?