AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 TImages mit einander vergleichen

Ein Thema von Mikro · begonnen am 4. Jul 2007 · letzter Beitrag vom 5. Jul 2007
Antwort Antwort
Seite 2 von 2     12   
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 21:10
Zitat von DeddyH:
@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.
Wenn es aber nur vier Grafiken sind, dann sucht man sich eben ein relevantes Pixel aus.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Mikro

Registriert seit: 28. Jun 2007
43 Beiträge
 
#12

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 21:17
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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 21:20
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Mikro

Registriert seit: 28. Jun 2007
43 Beiträge
 
#14

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 21:21
hab ich leider nicht, hab jpg... Muss ich eben fudeln, oder fällt jmd noch was anderes ein?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 21:38
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mikro

Registriert seit: 28. Jun 2007
43 Beiträge
 
#16

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 21:54
Zitat von DeddyH:
Hab da schnell mal was geschrieben.
Haha, du bist gut... Danke aber... Hab mir da auch jetzt was zusammengebastelt... Aber deins ist auf jedenfall eleganter... und grad mal geschrieben
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#17

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 22:07
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
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: 2 TImages mit einander vergleichen

  Alt 4. Jul 2007, 23:15
Zitat von DeddyH:
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;
Hallo.

müsste nicht anstattfor j := 0 to bm1.Width - 1 do for j := 0 to (bm1.Width * 3) -1 do zumindest bei 24 Bit Bildern stehen?

Delphi-Quellcode:
if not CompareMem(bm1.ScanLine[i], bm2.ScanLine[i], bm1.Width * 3) then
        exit;
hätte wohl auch gereicht.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: 2 TImages mit einander vergleichen

  Alt 5. Jul 2007, 08:15
Hallo,

das kann der Threadersteller ja dann noch einbauen. Ich hab das nur schnell runtergetippt, dass es da Optimierungsmöglichkeiten gibt, ist mir klar
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz