tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1596
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ronox Ronox ist offline Mitglied Bronze
    Registriert seit
    Nov 2006
    Beiträge
    26
    Hi,
    ich stehe grade vor einem kleinen Problem und denke das ich es Falsch angehe.
    Also ich habe einen ScreenShot von einem Programm, und will nun die X / Y Koordinate von einem Button bekommen, von diesem Button habe ich ein Bild welches ich erstmal in eine PictureBox geladen habe.

    Hier der Quellcode:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
                Bitmap tmp = new Bitmap("C:\\FindButton.bmp");
                Bitmap button1 = (Bitmap)pictureBox1.Image;
                int b1Treffer = 0;
                for (int x = 0; x < tmp.Width; x++)
                {
                    for (int y = 0; y < tmp.Height; y++)
                    {
                        if (tmp.GetPixel(x, y) == button1.GetPixel(0, 0))
                        {
                            for (int x2 = 0; x2 < button1.Width; x2++)
                            {
                                for (int y2 = 0; y2 < button1.Height; y2++)
                                {
                                    if (tmp.GetPixel((x + x2), (y + y2)) == button1.GetPixel(x2, y2))
                                    {
                                        b1Treffer++;
                                    }
                                    else
                                    {
                                        b1Treffer = 0;
                                    }
                                }
                            }
                        }
                    }
                }
                MessageBox.Show("Pixel - Treffer für Button1: " + b1Treffer);
            }

    Ich dachte mir jetzt, das er den Screenshot Pixel für Pixel vergleicht, wenn er einen Pixel findet der mit dem Button zusammenpasst, wird ab diesem Pixel geprüft ob dieser mit dem Button zusammen passt. Aber leider funktioniert das nicht und ist leider auch sehr unperformant. Gibt es vielleicht eine Einfachere Methode?
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    In dem von dir gezeigten Code lädst du das Bitmap aber nicht in die Picturebox, sondern vergleichst deinen Screenshot mit dem Bild, das in der PictureBox drin ist (vermutlich ein leeres Bild).
    Ersetze mal
    Code csharp:
    1
    2
    
    Bitmap tmp = new Bitmap("C:\\FindButton.bmp");
    Bitmap button1 = (Bitmap)pictureBox1.Image;
    durch
    Code csharp:
    1
    
    Bitmap button1 = new Bitmap("C:\\FindButton.bmp");
     
    hihi = -h²

  3. #3
    Ronox Ronox ist offline Mitglied Bronze
    Registriert seit
    Nov 2006
    Beiträge
    26
    Nein das ist so schon richtig.
    Also ich habe einen Screenshot(Abgelegt C:\\FindButton.bmp) und ein Screenshot vom Button (in pictureBox1) und möchte jetzt den Button in dem Screenshot finden und mir dann halt die Koordinate geben lassen wo dieser Button zu finden ist.
    Nur leider habe ich einen Fehler in meiner Logik, und das ganze ist nicht sehr performant, daher die Frage ob es eine Möglichkeit gibt das ganze anders umzusetzen?
     

  4. #4
    Avatar von VScan
    VScan VScan ist offline Mitglied Gold
    Registriert seit
    Dec 2008
    Ort
    Munich
    Beiträge
    131
    Hallo,

    hat dein Bild die gleichen Farbwerte an der Stelle des Buttons wie der Button selbst?

    Wenn ja, warum deckst Du nicht einen Bereich ab, an dem Du die Farbwerte exakt abspeicherst (linke obere ecke des Buttons) und diese dann im zu dursuchenden Bild vergleichst... d.h. wenn an einer Stelle RGB(*,*,*) zu finden ist und die umliegenden Werte, je nach größe des Bereichs den Du gewählt hast auch passen, dann beginne mit dem Bildvergleich an ermittelter Stelle.

    Wegen der Performanz: solange du Pixel für Pixel checken musst, wird das nicht schneller denke ich, aber eine andere Möglichkeit weis ich leider auch nicht.


    MFG
     
    „Jeder Fehler erscheint unglaublich dumm, wenn Andere ihn begehen.“
    Georg Christoph Lichtenberg

    Netiquette (vA §15)
    Codetags/Codeboxen
    Sehr gut gelöste Beiträge bitte mit einem "Danke" abschließen, danke :D

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 02.07.09, 09:46
  2. Screenshot
    Von LookAndFeel im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 13.11.08, 08:36
  3. [VB.net]Destkop Screenshot und Netzwerk Screenshot
    Von Alaitoc im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 22.11.07, 09:23
  4. Screenshot
    Von BladeNeo im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 17.02.05, 10:29
  5. DVD Screenshot
    Von docma im Forum Photoshop
    Antworten: 9
    Letzter Beitrag: 30.04.04, 09:53

Stichworte