TImage Picture vergleichen
-
Hi,
könnt ihr mir sagen wie ich vergleichen kann ob 2 Pictures von TImages gleich sind? Weil irgentwie funktioniert das nicht:if (Image1->Picture == Image2->Picture){Application->Terminiate();}Dankö schonmal

-
Hallo
Bei deinem Code werden die jeweiligen Adressen der Pointer verglichen, und da jedes Image sein eigenes Picture-Objekt besitzt ist die Bedingung also niemals war.
Was verstehst du unter ob 2 Pictures von TImages gleich sind?
Wenn du damit meinst das die Dimensionen und die einzelnen Pixel übereinstimmen sollen, dann must du das auch manuell vergleich (TBitmap::Height,Width,Canvas::Pixel)bis bald
akari
-
Ja hab mich vll ein bisschen unverständlich ausgedrück ich will so ne Art Memory programmieren und dann solls halt beim klicken auf die Images testen
ob die 2 Bilder jetzt gleich sind oder nicht
-
Hallo
da ist dein Ansatz aber definitiv falsch.
Anstatt nun die bilder der Karten zu vergleichen, solltest du lieber die Belegung der Images mit den Karten zwischenspeichern und diese dann vergleichen.
Am einfachsten kannst du dazu die Eigenschaft TImage::Tag verwenden.
Du nummerierst die Kartentypen mit Zahlen durch, also von 0 bis x. Bei laden der Bitmaps in die Images (oib nun zu Entwurfs-oder Laufzeit) schreibst du die jeweilige Nummer in die Tag-Eigenschaft des jeweiliegen TImages. Dann kannst du die Belegung zweier Images über den Tag vergleichen.bis bald
akari
-
Jop danke, funktioniert prima

-
Dürfte ich die Frage eventuell aufgreifen, da mich das auch interessiert. Wie kann man denn jetzt Pixel für Pixel vergleichen?
-
Du darfst.
int x,y; bool Ungleich; for(x=0;y<Image1->Picture->Height;x++) { if(x==Image1->Picture->Width) { x=0; y++; } if(Image1->Canvas->Pixels[x][y]!=Image2->Canvas->Pixels[x][y])Ungleich=true; }Habs jetz nicht getestet, müsste aber funzen.
-
Naja, wer Zeit hat schon

-
Christian211 schrieb:
Naja, wer Zeit hat schon

Danach hat ja hier keiner Gefragt

-
Na gut, aber dann
Kennst du verschachtelte Schleifen?
for(x=0;x<Image1->Picture->Width;x++) { for(y=0;y<Image1->Picture->Height;x++) //mach was }
-
Christian211 schrieb:
Na gut, aber dann
Kennst du verschachtelte Schleifen?
Hab schonmal davon gehört...
-
Hallo
außerdem wäre auch erstmal sicherzustellen, das die beiden Bitmaps die selben Dimensionen haben.
bis bald
akari
-
Gut, tut mir echt leid, dass ich helfen wollte.
-> Bitte alle meine Postings löschen.
Danke
-
Die Bilder kommen von einer IP-Überwachungskammera, mir war nach dem pixel ausles Befehl alles klar.
-
Um Bilder einer Kamera auf Veränderungen zu überwachen sollte man beim Vergleich der Pixel einen Schwellenwert verwenden (Helligkeitsveränderung).
Dann bei einer Folge von einem auszuprobierenden Prozentsatz von Veränderungen kann man Alarm geben.int CompareImages(TImage *bild1,TImage *bild2,int schwellenwert) { long aunt=0; PByteArray z1,z2; for(int y=0;y<bild1->Height-1;y++) { z1=(PByteArray)bild1->Picture->Bitmap->ScanLine [y]; z2=(PByteArray)bild2->Picture->Bitmap->ScanLine [y]; for (int x=0;x<bild1->Width-1;x++) { if (abs(z1[x]-z2[x])>schwellenwert) aunt++; } } if (bild1->Height*bild1->Width>0) { return 100*aunt/(bild1->Height*bild1->Width); } else return 0; }
-
Hmm.. wie das ganze mit einem bmp funktioniert ist klar und funktioniert auch.
Aber wie bekomme ich das mit einem JPG zum laufen?
Ich habs mal so probiert:
TJPEGImage *jp1 = new TJPEGImage(); jp1->LoadFromFile("bild1.jpg"); TImage *Image1x = new TImage(0); Image1x->Picture->Assign(jp1);Nur funktioniert das nicht.
Gruß
Rai
-
Hallo
Die Behandlung von JPG und GIF steht in der FAQ hier im BCB-Forum.
Nur funktioniert das nicht ist übrigens keine ausreichende Fehlermeldung.
bis bald
akari