AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Wenn Bilder gleich, dann Aktion auslösen

Wenn Bilder gleich, dann Aktion auslösen

Ein Thema von tuxinator · begonnen am 12. Sep 2011 · letzter Beitrag vom 12. Sep 2011
Antwort Antwort
tuxinator

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

Wenn Bilder gleich, dann Aktion auslösen

  Alt 12. Sep 2011, 19: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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Wenn Bilder gleich, dann Aktion auslösen

  Alt 12. Sep 2011, 19:19
Lass dir den Hash-Wert von den Dateien berechnen und vergleiche selbigen.

Suche mal nach Hier im Forum suchenMD5
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.083 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Wenn Bilder gleich, dann Aktion auslösen

  Alt 12. Sep 2011, 20:07
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.
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf