Einzelnen Beitrag anzeigen

tuxinator

Registriert seit: 12. Sep 2011
1 Beiträge
 
#1

Wenn Bilder gleich, dann Aktion auslösen

  Alt 12. Sep 2011, 18:16
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
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!
  Mit Zitat antworten Zitat