Wie vergleichen Sie zwei Bilder?
public void winCheck()
{
if (button1.Image == img1)
{
w1 = "P2";
button1.Image = new Bitmap(@"win_cross.png");
button2.Image = new Bitmap(@"win_cross.png");
button3.Image = new Bitmap(@"win_cross.png");
}
}
Hier sowohl button1.Image
und img1
haben gleiche Bild, aber immer noch, die Steuern gehen nicht in die if
block.
Ist Ihr jede Eigenschaft der beiden, so dass der Wert von beiden wird das gleiche sein.
Sind Sie versucht zu sagen, dass das Bild identisch sind, weil Sie bit-pro-bit-identisch (Sie zeigen das gleiche Bild)? Wie wollen Sie initialisieren den button1.Bild und der img1 variable?
Eigentlich sind Sie das gleiche Bild, bit-pro-bit , ich habe intialized den button1.Bild in button1 click-Ereignis-handler und ich img1(Bild)(public) Variablen in der main-Klasse selbst.
mögliche Duplikate von Vergleich der Bilder
Thisn ist sehr schlecht Codierung setzen auf grafische element zu halten, Staaten und test dieser Staaten. Stattdessen sollten Sie die Definition einer enumeration, die für die verschiedenen Staaten, haben ein Feld eingegeben mit diesem enum, und definieren Sie eine Methode, erfrischt Ihre Bild-Steuerelemente, die je nach Bereich enum-Wert.
Dies ist ein schönes Beispiel: dotnetexamples.com/2012/07/fast-bitmap-comparison-c.html
Eigentlich sind Sie das gleiche Bild, bit-pro-bit , ich habe intialized den button1.Bild in button1 click-Ereignis-handler und ich img1(Bild)(public) Variablen in der main-Klasse selbst.
mögliche Duplikate von Vergleich der Bilder
Thisn ist sehr schlecht Codierung setzen auf grafische element zu halten, Staaten und test dieser Staaten. Stattdessen sollten Sie die Definition einer enumeration, die für die verschiedenen Staaten, haben ein Feld eingegeben mit diesem enum, und definieren Sie eine Methode, erfrischt Ihre Bild-Steuerelemente, die je nach Bereich enum-Wert.
Dies ist ein schönes Beispiel: dotnetexamples.com/2012/07/fast-bitmap-comparison-c.html
InformationsquelleAutor k3rn3l | 2014-02-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Möglichkeit, es zu tun, wenn Sie können
unsafe
code und wenn Sie wollen, die Bilder werden genau die gleichen auf byte-Ebene:Vergleicht diese Bilder "wörtlich" - alle bytes müssen exakt gleich sein. Andere Möglichkeit wäre das vergleichen der Farben der Pixel - dann
PixelFormat
s nicht der gleiche sein (aus hier):Dies kann jedoch sehr langsam. Den gleichen link enthält eine interessante Idee für den Vergleich der hash-Werte:
InformationsquelleAutor BartoszKP
Dein code funktioniert nicht, da Sie einen Vergleich der Variablen zeigen auf die Bilder (d.h. die in-memory-Adresse) nicht die Bilddaten (Pixel).
Sehen ImageComparer.Compare-Methode. Hat überladungen, um anzugeben, Toleranz.
Es ist seit VS2012.
https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitesting.imagecomparer.compare.aspx
InformationsquelleAutor user3285954
verwenden Sie keine Doppel-gleich (==).
verwenden Sie equals-Methode.
(wenn button1.Bild.equals(img1))
//Sie den code
es gibt eine NullReferenceException - Objektverweis nicht auf eine Instanz eines Objekts.
seine Werke-Bilder @idov
dann das image ist null. check für it @k3rn3l
Warum nicht testen Sie es selbst? Bitmap-b1 = (Bitmap)Bitmap.FromFile(fname); Bitmap b2 = (Bitmap)Bitmap.FromFile(fname); var isEqual = b1.Equals(b2);
InformationsquelleAutor Asad Ali