myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Pixel oder Screenshot auslesen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Pixel oder Screenshot auslesen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
TheGateway
myCSharp.de-Mitglied

Dabei seit: 05.02.2020
Beiträge: 7


TheGateway ist offline

Pixel oder Screenshot auslesen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich habe eine Frage,

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

C#-Code:
        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
30.06.2020 20:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.636
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
30.06.2020 20:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
TheGateway
myCSharp.de-Mitglied

Dabei seit: 05.02.2020
Beiträge: 7

Themenstarter Thema begonnen von TheGateway

TheGateway ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

besteht den die Möglichkeit von dem gesuchten ein ein Bild zu machen und den desktop danach durchsuchen zu lassen?
30.06.2020 21:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.636
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
Gestern, 09:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 02.07.2020 20:37