Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Artefakte bei Verkleinerung animierter GIFs (https://www.delphipraxis.net/173715-artefakte-bei-verkleinerung-animierter-gifs.html)

GPRSNerd 12. Mär 2013 12:34

Artefakte bei Verkleinerung animierter GIFs
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

ich zeige in einer Applikation aus dem Internet heruntergeladene GIFs an (Niederschlagsradarbilder). Die GIFs sind teilweise animiert und größtenteils im Format GIF89A und werden durch Delphi XE3 durch den Typen TGIFImage nativ unterstützt. Die Anzeige der Grafiken in einem TImage klappt auch soweit, es sei denn die animierten GIFs werden in der Anzeige verkleinert, dann treten progressiv schwarze Artefakte bei der Anzeige der Pages auf. Wird die Grafik hingegen in Originalgröße oder vergrößert dargestellt, so treten diese Artefakte nicht auf, siehe Screenshots.

Hier der relevante (sehr vereinfachte) Code, mit dem ich die Grafiken lade und anzeige:

Delphi-Quellcode:
procedure TForm1.bOpenClick(Sender: TObject);
begin
  if dlgOpen1.execute then
  begin
    i1.Picture.LoadFromFile(dlgOpen1.FileName);
    lType.Caption := i1.Picture.Graphic.ClassName;
    if i1.Picture.Graphic.ClassType = TGIFImage then
    begin
      with (i1.Picture.Graphic as TGIFImage) do
      begin
        Animate       := True;
        AnimateLoop   := glContinously;
        AnimationSpeed := 100;
      end;
    end;
  end;
end;
Weiss jemand, wodurch die Artefakte auftreten und ob man diesen Effekt irgendwie umgehen kann?

Namenloser 12. Mär 2013 12:43

AW: Artefakte bei Verkleinerung animierter GIFs
 
Animierte Gifs enthalten meist Differenzbilder.

Ich vermute, dass beim Runterskalieren die Differenzbilder einzeln herunterskaliert werden, wodurch die Artefakte auftreten.

Die Lösung sehe ich darin, die zusammengefügten Einzelbilder der Animation in voller Auflösung vorzuberechnen, und diese dann anschießend herunterzuskalieren. Wie das mit der TGifImage-Komponente von Delphi XE3 geht, kann ich dir leider nicht sagen...

BUG 12. Mär 2013 13:12

AW: Artefakte bei Verkleinerung animierter GIFs
 
GIF benutzt eine Pallette, also indizierte Farben. Wenn du die Einzelbilder in RBG(A)-Farben umwandelst, könnte das Skalieren besser klappen. Ich weiß aber nicht, in wie weit sowas von der Komponente bereits gemacht wird (eher nicht).

GPRSNerd 15. Mär 2013 11:44

AW: Artefakte bei Verkleinerung animierter GIFs
 
Liste der Anhänge anzeigen (Anzahl: 2)
Danke für die Hints, es scheint sich um ein Problem mit "optimierten" Differential-GIFs zu handeln.
Auf dieser Webseite kann man GIFs mit mehreren Frames/Pages "dekompilieren" lassen, einmal mit Entfernen der Optimierung und einmal ohne.
Ohne Entfernen der Optimierung kommen Frames raus, die den Angezeigten ähneln, siehe Screenshots.
Da gibt es wohl einen Bug beim Anzeigen, den ich wohl in Embarcadero's QC mal einstellen werde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz