Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Wenn Bilder gleich, dann Aktion auslösen (https://www.delphipraxis.net/163006-wenn-bilder-gleich-dann-aktion-ausloesen.html)

tuxinator 12. Sep 2011 18:16

Wenn Bilder gleich, dann Aktion auslösen
 
Hi,

ich muss gleich vorweg sagen, dass die Frage wahrscheinlich total idiotisch ist, aber ich schaffe es einfach nicht. Ich bin wirklich ganz neu in Delphi und im Programmieren allgemein und habe deswegen auch wahnsinnige Probleme fertige Quelltexte von anderen zu durchschauen und abzuwandeln usw. Ihr müsst das entschuldigen :P
Jetzt zu meiner Frage: Ich möchte gerne zwei Bitmaps miteinander vergleichen und wenn sie identisch sind, dann eine Aktion auslösen. Also einen bestimmten Text anzeigen oder einen Ton abspielen. Das ganze sollte möglichst schnell gehen, auch bei sehr großen Bitmaps. Bisher habe ich mit diesem Code
Delphi-Quellcode:
type
  PRGBTripleArray = ^TRGBTripleArray;
  TRGBTripleArray = array [0..50000000] of TRGBTriple;

function CompareImages(Image1,Image2:TBitmap):Int64;
var x,y:integer;
    P1,P2:PRGBTripleArray;
    summe1,summe2:integer;
begin
result := 0;
summe1 := 0;
summe2 := 0;
for y := 0 to Image1.Height -1 do
  begin
    P1 := Image1.ScanLine[y];
    P2 := Image2.ScanLine[y];
      if not CompareMem(p1,p2,Image1.Width*SizeOf(TRGBTriple)) then
        begin
          for x := 0 to Image1.Width-1 do
            begin
              inc(summe1,RGB(P1[x].rgbtRed,P1[x].rgbtGreen,P1[x].rgbtBlue));
              inc(summe2,RGB(P2[x].rgbtRed,P2[x].rgbtGreen,P2[x].rgbtBlue));
              if summe1 <> summe2 then
                begin
                  summe1 := 0;
                  summe2 := 0;
                  inc(result);
                end;
            end;
        end;
  end;
Application.ProcessMessages;
end;
gearbeitet und dann so die Aktion ausgeführt
Delphi-Quellcode:
if (CompareImages(Image1.Picture.Bitmap,Image2.Picture.Bitmap) = 0) then begin
ShowMessage ('Identisch');
end;
.
Den Code hatte ich hier gefunden: http://www.delphipraxis.net/80639-bi...rgleichen.html

Das ganze funktioniert auch, ist mir aber erstens ein bisschen zu langsam und kommt mir zweitens relativ kompliziert und gepfuscht vor. Gibt es da eine andere, einfachere Lösung?
Wie gesagt, die Frage ist sicher doof, aber ich bin Anfänger :)

Danke schön!

Sir Rufo 12. Sep 2011 18:19

AW: Wenn Bilder gleich, dann Aktion auslösen
 
Lass dir den Hash-Wert von den Dateien berechnen und vergleiche selbigen.

Suche mal nach Hier im Forum suchenMD5

DeddyH 12. Sep 2011 19:07

AW: Wenn Bilder gleich, dann Aktion auslösen
 
Wenn man lediglich wissen möchte, ob die beiden Bitmaps exakt gleich sind, muss man den Unterschied ja nicht weiter berechnen, sondern kann nach der ersten Abweichung die Schleife verlassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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