![]() |
2 TImages mit einander vergleichen
Hi,
wenn 2 ausgewählte Imgaes gleich sind, soll etwas passieren. Ich hab mir das zusammengedacht:
Delphi-Quellcode:
das funktioniert aber nicht, zeigt mir immer ne 0 (Startwert) im edit-Feld an.
if image1.picture=image3.picture then edit1.text:=inttostr(strtoint(edit1.text)+ 1);
Wie funktioniert das ganze bei TRichEdit, da klappt es bei mir auch nicht... BItte um Hilfe!!! |
Re: 2 TImages mit einander vergleichen
Zitat:
|
Re: 2 TImages mit einander vergleichen
Kann ich nicht einfach den Pfad vergleichen, denn der ist von mir festgegeben. Ist gibt 4 verschiedene Bilder, d.h. 4 verschiedene, aber fest vergebene Dateipfade, wenn ein Dateipfad mit dem gesuchten übereinstimmt, soll was passieren, das geht nicht??
Wie kann ich sonst prüfen, ob das Bild das Gleiche ist, wenn ich weiß, dass es nur eins von 4 sein kann??? |
Re: 2 TImages mit einander vergleichen
Lädts Du die Bilder mit LoadFromFile? Dann merk Dir doch einfach den Pfad je Image.
|
Re: 2 TImages mit einander vergleichen
Der Bildpfad wird norgendwo gespeichert, entweder machst du das selbst oder diese Möglichkeit funktioniert nicht. Du könntest versuchen,. bei den Bildern z.B. die linken oberen Pixel miteinander zu vergleichen. Das geht so:
Delphi-Quellcode:
edit: Fehler korrigiert
if image1.canvas.pixels[0,0]=image2.canvas.pixels[0,0] then
|
Re: 2 TImages mit einander vergleichen
@Apollonius: Das ist jetzt nicht Dein Ernst, oder? Dann würden ja alle Grafiken matchen, die zufällig in der linken oberen Ecke die gleiche Farbe haben.
|
Re: 2 TImages mit einander vergleichen
nur ein Pixel zu vergleichen würde nicht klappen, die Bilder haben sehr ähnliche Hintergründe...
Ich weiße die Bilder schon vorher zu, also nicht über LoadFromFile, irgendwo muss doch der Pfad von dem Bild hinterlegt sein. Denn wenn ich nen leeres TImage (Image2) nehme und schreibe:
Delphi-Quellcode:
nimmt das das Bild des ersten Image an. Also muss das auch wissen, was es drin hat ;-)
image2.picture:=image1.picture
bye |
Re: 2 TImages mit einander vergleichen
Zitat:
|
Re: 2 TImages mit einander vergleichen
doppelt auf TImage klicken, dann auf Laden, Pfad wählen, ok... :-D Eben vor dem compilieren...
|
Re: 2 TImages mit einander vergleichen
Dann hast Du die Bilder fest in den Ressourcen. Nimm doch eine TImageList, lade Deine 4 Bilder da hinein und weise den Images die Grafiken zur Laufzeit zu.
|
Re: 2 TImages mit einander vergleichen
Zitat:
|
Re: 2 TImages mit einander vergleichen
Wollte das mit dem Pixel vergleichen mal versuchen, aber der gibt mir nach deinem Code eine Fehlermeldung raus:
UNdefinierter Bezeichner "Canvas", was ich aber absolut nicht verstehe. |
Re: 2 TImages mit einander vergleichen
Ups, schande über mich! Mach entweder image1.canvas oder image1.picture.bitmap.canvas draus. Das mit dem Canvas funktioniert übrigens nur, falls du .bmp-Daten verwendest.
|
Re: 2 TImages mit einander vergleichen
hab ich leider nicht, hab jpg... Muss ich eben fudeln, oder fällt jmd noch was anderes ein?
|
Re: 2 TImages mit einander vergleichen
Hab da schnell mal was geschrieben.
Delphi-Quellcode:
function GleicheBilder(gr1,gr2: TGraphic): Boolean;
var i, j: integer; P1,P2: PByteArray; bm1,bm2: TBitmap; begin Result := false; bm1 := TBitmap.Create; bm2 := TBitmap.Create; try bm1.Assign(gr1); bm2.Assign(gr2); if (bm1.Height <> bm2.Height) or (bm1.Width <> bm2.Width) then exit; for i := 0 to bm1.Height - 1 do begin P1 := bm1.ScanLine[i]; P2 := bm2.ScanLine[i]; for j := 0 to bm1.Width - 1 do if P1^[j] <> P2^[j] then exit; end; Result := true; finally FreeAndNil(bm1); FreeAndNil(bm2); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if GleicheBilder(Image1.Picture.Graphic,Image2.Picture.Graphic) then showmessage('Gleich') else ShowMessage('Nicht gleich'); end; |
Re: 2 TImages mit einander vergleichen
Zitat:
|
Re: 2 TImages mit einander vergleichen
Bei JPEG-Dateien könntest du da unter Umständen Pech haben. Du vergleichst die Piyel auf 100%-ige Gleichheit. Da JPEG aber vrelustbehaftet komprimiert, kanns sein, dass die Farben um vielleicht 1 RGB-Wert verschieden sind, sie aber als ungleich erkannt werden. Du solltest eine Toleranz einbauen, mit der du die Bilder vergleichst.
MfG Ultimator |
Re: 2 TImages mit einander vergleichen
Zitat:
müsste nicht anstatt
Delphi-Quellcode:
for j := 0 to bm1.Width - 1 do
Delphi-Quellcode:
zumindest bei 24 Bit Bildern stehen?
for j := 0 to (bm1.Width * 3) -1 do
Delphi-Quellcode:
hätte wohl auch gereicht.
if not CompareMem(bm1.ScanLine[i], bm2.ScanLine[i], bm1.Width * 3) then
exit; |
Re: 2 TImages mit einander vergleichen
Hallo,
das kann der Threadersteller ja dann noch einbauen. Ich hab das nur schnell runtergetippt, dass es da Optimierungsmöglichkeiten gibt, ist mir klar :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz