Einzelnen Beitrag anzeigen

Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Animierte GIFs auflösen

  Alt 6. Mär 2022, 00:16
Ein GIF mit APNG-Frames? Was?
Es gibt doch nur entweder GIF oder APNG.

Bei APNG kannst du durch die Chunks iterieren.
Der erste Chunk ist der IHDR-Chunk. Den solltest du aufbewahren. Ebenso PLTE falls vorhanden.
Dann iterierst du weiter durch die Datei. Für jeden Frame speicherst du aufeinanderfolgende IDAT und fdAT (aufeinanderfolgend, weil sie (unnötigerweise) in Blöcke aufgeteilt worden sein können) zusammen mit dem Header und den zuvor aufgebewahrten IHDR und PLTE ab. Bei fdAT musst du im IHDR die Breite und Höhe ersetzen, und vom fdAT die Sequenznummer überspringen. Die Breite und Höhe eines Frames findest du vom voransteheden fcTL-Chunk. Abschließend noch ein IEND-Chunk. Zudem musst du die Chunks-CRCs neu berechnen.

Beachte, dass APNGs keine vollen Frames speichern müssen und das oben beschriebene Vorgehen für volle Frames gedacht ist. Du kannst die vollen Frames selbst aus den wie oben beschrieben erstellten Einzelbildern erstellen. Es gibt verschiedene Zeichen- und Reset-Modi, die du dabei beachten musst, und die im fcTL-Chunk stehen. Du wirst mindestens einen Alpha-Blending-Algorithmus brauchen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat