![]() |
Bitmap Unterschiede mit FMX
Hallo,
ich habe mir schon einige Funktionen zum Vergleichen 2er Bitmaps, Images angeschaut. Leider funktionieren die nicht unter Firemonkey. Gibt es für Firemonkey überhaupt etwas? Für mich wäre interessant, um wieviel Pixel/Prozent sich zwei Bilder unterscheiden. Zur Not auch, ob sie gleich sind. Hat da jemand etwas? Vielleicht kann FMX das auch von Haus aus, habe aber nix gefunden. |
AW: Bitmap Unterschiede mit FMX
|
AW: Bitmap Unterschiede mit FMX
Danke, aber irgendwie stehe ich noch auf dem Schlauch ...
|
AW: Bitmap Unterschiede mit FMX
Zitat:
Delphi-Quellcode:
.
TBitmapSurface
|
AW: Bitmap Unterschiede mit FMX
Danke, damit bin ich erstmal weitergekommen. Ich bin in Sachen Bitmap/Grafik nicht zu Hause, daher sorry für den Pfusch. Folgende Funktion gibt bei mir immer 0 aus, obwohl sich die Bilder unterscheiden. Siehst Du da auf Anhieb einen Fehler? Hier und da lässt es sich sicher optimieren, bin aber gerade bei Firemonkey vorsichtig. Knallt gerne und dann ist ev. die ganze Anwendung abgestürzt.
Code:
Function CompareImages(Bitmap1, Bitmap2: TBitmap): LongWord;
var x, y, DiffPixel, TotalPixel: Integer; Surf1: TBitmapSurface; Surf2: TBitmapSurface; begin Surf1 := TBitmapSurface.Create; Surf1.Assign(Bitmap1); Surf2 := TBitmapSurface.Create; Surf2.Assign(Bitmap2); Result := 0; DiffPixel := 0; TotalPixel := 0; If (Surf1.Height<>Surf2.Height) or (Surf1.Width<>Surf2.Width) then Exit; for x := 0 to Surf1.Width-1 do begin for y := 0 to Surf1.Height-1 do begin If Surf1.Pixels[x, y]<>Surf2.Pixels[x,y] then Inc(DiffPixel); Inc(TotalPixel); end; end; // Percent Result := (DiffPixel*100) div TotalPixel; end; |
AW: Bitmap Unterschiede mit FMX
Darum:
Delphi-Quellcode:
Hier Result am besten initial auf -1 o.ä. setzen.
Result := 0;
... If (Surf1.Height<>Surf2.Height) or (Surf1.Width<>Surf2.Width) then Exit; |
AW: Bitmap Unterschiede mit FMX
Nein er geht in die Funktion rein, sehe ich im Debugger. Aber die Unterscheide sind angeblich zu klein (If Surf1.Pixels[x, y]<>Surf2.Pixels[x,y] then Inc(DiffPixel)). Die 0 resultiert aus dem Dreisatz am Ende (gerundet)
|
AW: Bitmap Unterschiede mit FMX
Es wäre vllt. besser wenn du statt einem Longword ein Double o.ä. zurückgeben würdest.
|
AW: Bitmap Unterschiede mit FMX
Dann bleibt es aber bei 0. Irgendwas läuft bei "Surf1.Pixels[x, y]<>Surf2.Pixels[x,y]" schief. Dafür kenne ich mich aber leider zu wenig mit Bitmaps und co aus.
|
AW: Bitmap Unterschiede mit FMX
Nachtrag: Funktioniert doch, habe nur Screenshots von einem Video gemacht. Habe es mit anderen Bildern getestet und läuft. Suboptimal, aber läuft.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 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