Animiertes Gif
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Animiertes Gif
Hallo,
Wie kann man unter LZ herausfinden ob es sich bei einem *.gif um ein einfaches oder Animiertem Gif File handelt?
Wie kann man unter LZ herausfinden ob es sich bei einem *.gif um ein einfaches oder Animiertem Gif File handelt?
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 385
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Animiertes Gif
Hi!
In der Unit FPReadGif habe ich mir mal die Klasse TFPReaderGif angeschaut. Darin habe ich gesehen, dass die Lesefunktion nur einen Image-Descriptor interpretiert, d.h. die Klasse kümmert sich nicht um mehrere Bilder.
Aber im Web habe ich eine Komponente speziell für Animierte GIFs mit Lazarus gefunden: https://github.com/aducom/gifanim
Grüße, Jörg
In der Unit FPReadGif habe ich mir mal die Klasse TFPReaderGif angeschaut. Darin habe ich gesehen, dass die Lesefunktion nur einen Image-Descriptor interpretiert, d.h. die Klasse kümmert sich nicht um mehrere Bilder.
Aber im Web habe ich eine Komponente speziell für Animierte GIFs mit Lazarus gefunden: https://github.com/aducom/gifanim
Grüße, Jörg
Re: Animiertes Gif
@hbr: Was ist "LZ"?
Meinst du "LZW" (Lempel-Ziv-Welch-Algorithmus)?
Was verwendest du denn für die AnimatedGIF?
TBGRAAnimatedGif oder die Optionen, die Jorg3000 genannt hat?
Die Frage wird sich wohl darüber klären lassen.
Meinst du "LZW" (Lempel-Ziv-Welch-Algorithmus)?
Was verwendest du denn für die AnimatedGIF?
TBGRAAnimatedGif oder die Optionen, die Jorg3000 genannt hat?
Die Frage wird sich wohl darüber klären lassen.
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Animiertes Gif
Danke für die Antworten,
es ging mir ja nicht darum, dass die Animierten GIF's angezeigt werden,
sondern nur darum, dass man ermitteln kann, welches GIF es ist.
Habe nun die BGRA Controls hinzugefügt und schreibe das Programm komplett neu,
weil ich mich selbst durch die Struktur nicht mehr zurechtgefunden habe.
es ging mir ja nicht darum, dass die Animierten GIF's angezeigt werden,
sondern nur darum, dass man ermitteln kann, welches GIF es ist.
Habe nun die BGRA Controls hinzugefügt und schreibe das Programm komplett neu,
weil ich mich selbst durch die Struktur nicht mehr zurechtgefunden habe.
Re: Animiertes Gif
Wenn es nur darum geht, könnte man es mit Bordmitteln z.B. so probieren (quick and dirty):hbr hat geschrieben: Fr 26. Jul 2024, 12:58 es ging mir ja nicht darum, dass die Animierten GIF's angezeigt werden,
sondern nur darum, dass man ermitteln kann, welches GIF es ist.
Code: Alles auswählen
uses FPImage, FPCanvas, FPReadGif;
...
function isAnimatedGif(FileName:String):Boolean;
var Image : TFPCustomImage;
ReaderGIF : TFPReaderGif;
begin
Image := TFPMemoryImage.Create (0,0);
ReaderGIF := TFPReaderGif.Create;
Image.LoadFromFile (FileName, ReaderGIF);
Result:=ReaderGIF.GraphicsCtrlExt.DelayTime>0;
ReaderGIF.Free;
Image.Free;
end;
Da kann man gerne drüber diskutieren.
Den Codefetzen müsste man natürlich noch absichern (try etc..).
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Animiertes Gif
Ja da tauscht man eine übel mit der anderen ein.
Jetzt habe ich das Problem, wenn ich in das BGRASpriteAnimation1.AnimatedGifToSprite(opendialog1.FileName);
Eine andere Datei (bmp, jpg…usw.) lade und den Mime Type abfragen will, (weil ja eine Base64 umgewandelte Datei keine Bildtyperweiterung besitzt) auf dem Befehl (BGRASpriteAnimation1.Sprite. MimeType) ein Schloss ist, also nicht geht.
BGRASpriteAnimation1.Sprite. MimeType;
Eventuell hierzu Idee?
Jetzt habe ich das Problem, wenn ich in das BGRASpriteAnimation1.AnimatedGifToSprite(opendialog1.FileName);
Eine andere Datei (bmp, jpg…usw.) lade und den Mime Type abfragen will, (weil ja eine Base64 umgewandelte Datei keine Bildtyperweiterung besitzt) auf dem Befehl (BGRASpriteAnimation1.Sprite. MimeType) ein Schloss ist, also nicht geht.
BGRASpriteAnimation1.Sprite. MimeType;
Eventuell hierzu Idee?
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Animiertes Gif
Da ich überhaupt mit TBGRA keinen Stream in BGRASpriteAnimation1.Sprite.LoadFromStream(Stream)theo hat geschrieben: Fr 26. Jul 2024, 13:38Wenn es nur darum geht, könnte man es mit Bordmitteln z.B. so probieren (quick and dirty):hbr hat geschrieben: Fr 26. Jul 2024, 12:58 es ging mir ja nicht darum, dass die Animierten GIF's angezeigt werden,
sondern nur darum, dass man ermitteln kann, welches GIF es ist.
Die Idee dabei ist, dass ein nicht-animiertes Bild keine DelayTime>0 hat.Code: Alles auswählen
uses FPImage, FPCanvas, FPReadGif; ... function isAnimatedGif(FileName:String):Boolean; var Image : TFPCustomImage; ReaderGIF : TFPReaderGif; begin Image := TFPMemoryImage.Create (0,0); ReaderGIF := TFPReaderGif.Create; Image.LoadFromFile (FileName, ReaderGIF); Result:=ReaderGIF.GraphicsCtrlExt.DelayTime>0; ReaderGIF.Free; Image.Free; end;
Da kann man gerne drüber diskutieren.
Den Codefetzen müsste man natürlich noch absichern (try etc..).
ohne Fehler laden kann ist das Packet für mich unbrauchbar, leider finde ich keinerlei Beispiele dafür.
Vielleicht liegt es daran das der Streamtype hier Cardinal ist.
Also habe ich Deine Funktion versucht, aber sie funktioniert auch nicht.
Habe aber dann auch folgende Änderungen gemacht da mein Typ Stream ist.
Code: Alles auswählen
function isAnimatedGif(StreamName:TMemoryStream):Boolean;
var Image : TFPCustomImage;
ReaderGIF : TFPReaderGif;
begin
Image := TFPMemoryImage.Create (0,0);
ReaderGIF := TFPReaderGif.Create;
Image.LoadFromStream(StreamName, ReaderGIF);
//Image.LoadFromFile (FileName, ReaderGIF);
Result:=ReaderGIF.GraphicsCtrlExt.DelayTime>0;
ReaderGIF.Free;
Image.Free;
end;
Re: Animiertes Gif
Warum funktioniert die nicht?hbr hat geschrieben: Fr 26. Jul 2024, 16:53 Also habe ich Deine Funktion versucht, aber sie funktioniert auch nicht.
Ist halt für File statt Stream, aber sie funktioniert doch?
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Animiertes Gif
OK Sorry richtig, habe diese mit File versucht und sie Funktioniert.
Ich bekomme es nicht hin, sie auf Stream umzusetzen.
Was muss ich ändern ?
Dann verzweifele ich an der Komponente (BGRASpriteAnimation).
Das einzige was Funktioniert ist BGRASpriteAnimation.AnimatedGifToSprite(opendialog1.FileName);
alle andere Versuche mit BGRASpriteAnimation.Sprite.LoadFromStream(Stream,0);
BGRASpriteAnimation.Sprite.SaveToStream('Filename');
schlugen fehl, es wird einfach nichts geladen, übergeben bzw. angezeigt.
Bei LoadFromStream(sind die Parameter: AStream, ASize).
Was ist mit ASize gemeint? der Startwert? die StreamLänge?
bei allem anderen als 0, gibt es Fehler.
Was kommt da rein?
Bitte um Unterstützung.
Re: Animiertes Gif
Bei mir geht deine Funktion mit dem Stream.hbr hat geschrieben: Fr 26. Jul 2024, 20:07 Ich bekomme es nicht hin, sie auf Stream umzusetzen.
Was muss ich ändern ?
Vielleicht hilft es, die Position auf 0 zu setzen.
Code: Alles auswählen
function isAnimatedGif(AStream:TMemoryStream):Boolean;
var Image : TFPCustomImage;
ReaderGIF : TFPReaderGif;
begin
Image := TFPMemoryImage.Create (0,0);
ReaderGIF := TFPReaderGif.Create;
AStream.Position:=0; //<---
Image.LoadFromStream(AStream, ReaderGIF);
Result:=ReaderGIF.GraphicsCtrlExt.DelayTime>0;
ReaderGIF.Free;
Image.Free;
end;