Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Bitmap Unterschiede mit FMX (https://www.delphipraxis.net/188301-bitmap-unterschiede-mit-fmx.html)

greenmile 18. Feb 2016 08:42

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.

Sir Rufo 18. Feb 2016 08:49

AW: Bitmap Unterschiede mit FMX
 
Schau dir mal Delphi-Referenz durchsuchenTBitmapSurface an

Direktlink http://docwiki.embarcadero.com/Libra...TBitmapSurface

greenmile 18. Feb 2016 08:56

AW: Bitmap Unterschiede mit FMX
 
Danke, aber irgendwie stehe ich noch auf dem Schlauch ...

Sir Rufo 18. Feb 2016 09:04

AW: Bitmap Unterschiede mit FMX
 
Zitat:

Zitat von greenmile (Beitrag 1330709)
Danke, aber irgendwie stehe ich noch auf dem Schlauch ...

Du brauchst doch den Zugriff auf die einzelnen Pixel. Den gibt es über
Delphi-Quellcode:
TBitmapSurface
.

greenmile 18. Feb 2016 09:58

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;

bra 18. Feb 2016 10:09

AW: Bitmap Unterschiede mit FMX
 
Darum:

Delphi-Quellcode:
Result   := 0;
...
If (Surf1.Height<>Surf2.Height) or (Surf1.Width<>Surf2.Width) then Exit;
Hier Result am besten initial auf -1 o.ä. setzen.

greenmile 18. Feb 2016 10:13

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)

Neutral General 18. Feb 2016 10:21

AW: Bitmap Unterschiede mit FMX
 
Es wäre vllt. besser wenn du statt einem Longword ein Double o.ä. zurückgeben würdest.

greenmile 18. Feb 2016 10:45

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.

greenmile 18. Feb 2016 11:27

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