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


Anmelden zum Antworten