![]() |
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:
gearbeitet und dann so die Aktion ausgeführt
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;
Delphi-Quellcode:
.
if (CompareImages(Image1.Picture.Bitmap,Image2.Picture.Bitmap) = 0) then begin
ShowMessage ('Identisch'); end; Den Code hatte ich hier gefunden: ![]() 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! |
AW: Wenn Bilder gleich, dann Aktion auslösen
|
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 10:01 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