![]() |
Bitmaps als Gif mit animation speichern
Hi
ich suche eine Funktion (kostenlos oder egal) um ein animiertes Gif-Bild zu erstellen |
AW: Bitmaps als Gif mit animation speichern
Seit Delphi 2010 (oder Delphi 2009) ist TGifImage (in der Unit gifimage) in den VCL-Source übernommen worden. Die Komponente stammt von
![]() -- EDIT Habe gerade nochmals nachgeschaut und bin ![]() |
AW: Bitmaps als Gif mit animation speichern
da sich der ursprüngliche Fragesteller nicht dafür bedankt hat möchte ich dies gerne hiermit nachholen:
Vielen Dank s.h.a.r.k :thumb: (Mir ist bewusst das es ein alter Topic ist aber über die Suche habe ich diese hilfreiche Antwort gefunden und möchte mich entsprechend bedanken da dies bisher noch nicht erfolgt ist) |
AW: Bitmaps als Gif mit animation speichern
Völlig egal, wie alt das Thema ist, so bleibt es dennoch EXTREM nützlich ! Auch ich möchte mich an dieser Stelle ganz herzlich bedanken :!: :thumb: 8-):dance:
Das ist ganz genau das, was ich brauche, um ein Smiley-Programm fertig stellen zu können. Erheblich besser als dieser aufgeblähte :evil: Ballast, den man mit der zudem fehlerbehafteten :wall: Jedi-Bibliothek :feuerchen: rumschleppen müßte. |
AW: Bitmaps als Gif mit animation speichern
War gerade auch auf der Suche nach einer Möglichkeit mehrere Bitmaps in einer animierten GIF-Datei zu speichern.
Der obige Link führt zu einer Seite, wo man die Unit FTGifAnimate laden kann. GifImage habe ich ersetzt durch "GIFImg" und "GIFConsts". Leider kompiliert die unit nicht, weil an 3 Stellen ein TGIFSubImage erwartet wird, das der Compiler nicht kennt. Hat jemand ein Tipp, wie man das Problem lösen kann? Oder gibt es inzwischen eine andere (evtl. sogar in Delphi integrierte) Lösung, wie man mehrere Bitmaps als ein animiertes GIF speichern kann? |
AW: Bitmaps als Gif mit animation speichern
![]() Wobei ![]() Zitat:
Zitat:
|
AW: Bitmaps als Gif mit animation speichern
Ja, danke. Auf die Idee , TGifSubImage könnte durch TGifFrame ersetzt worden sein, war ich auch schon gekommen, allerdings die FTGifAnimate unit funktioniert dann nicht, wenn ich einfach TGifSubImage durch TGifFrame ersetze (und statt GifImage die Delphi VCL.Imaging Gif units verwende).
Wenn ich das Bespiel mit der Gifmage-Unit aus Deinem Link verwende, kompiliert es und läuft, beim Speichern als Gif-Datei erhalte ich allerdings die Fehlermeldung "Unsupported GIF Version". Gibt es evtl. irgendwo eine neuere FTGifAnmiate Unit, die auf Delphis GifUnits angepasst wurde? |
AW: Bitmaps als Gif mit animation speichern
Hallo Harry,
ich habe das so gelöst (schon etwas her):
Code:
Beste Grüße
function ConvertBitmapTo8Bit(bmp: TBitmap): TBitmap;
var jpg: TJpegImage; begin if bmp<>nil then begin jpg:=TJpegImage.Create; jpg.CompressionQuality:=100; jpg.Assign(bmp); jpg.JPEGNeeded; jpg.PixelFormat:=jf8bit; jpg.DibNeeded; result:=TBitmap.Create; result.PixelFormat:=pf8bit; result.Assign(jpg); jpg.Free; end else result:=nil; end; // procedure ExportGIF(FileName: string); var Bitmap24Bit, Bitmap8Bit: TBitmap; i: Integer; function AddBitmap(GIF: TGIFImage; Source: TBitmap; Transparent: Boolean; Delay: Integer): TGIFFrame; var GCE: TGIFGraphicControlExtension; LoopExt: TGIFAppExtNSLoop; begin result:=GIF.Add(Source); if (GIF.Images.Count=1) then begin LoopExt:=TGIFAppExtNSLoop.Create(Result); LoopExt.Loops:=0; end; GCE:=TGIFGraphicControlExtension.Create(result); GCE.Delay:=Round(Delay/10); if Transparent then begin GCE.Transparent:=True; GCE.TransparentColorIndex:=result.Pixels[0, result.Image.Height-1] end; end; var GIF: TGIFImage; OptimizeOptions: TGIFOptimizeOptions; begin GIF:=TGIFImage.Create; for i:=0 to BitmapCount-1 do begin Bitmap24Bit:=HoleBitmap(i); if Bitmap24Bit<>nil then begin Bitmap8Bit:=ConvertBitmapTo8Bit(Bitmap24Bit); if Bitmap8Bit<>nil then begin AddBitmap(GIF, Bitmap8Bit, False, Round(1000/FramesPerSecond)); Bitmap8Bit.Free; end; Bitmap24Bit.Free; end; end; GIF.OptimizeColorMap; OptimizeOptions := []; include(OptimizeOptions, ooMerge); include(OptimizeOptions, ooCrop); GIF.Optimize(OptimizeOptions, rmNone, dmNearest, 0); GIF.SaveToFile(FileName); GIF.Free; end; |
AW: Bitmaps als Gif mit animation speichern
Danke Dir.
Unter ![]() habe ich das gefunden, geht anscheinend noch einfacher?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Bmp: TBitmap; Gif: TGIFImage; begin Bmp := TBitmap.Create; Gif := TGIFImage.Create; try Bmp.LoadFromFile('img0.bmp'); Bmp.Transparent := True; Gif.Add(Bmp); Bmp.LoadFromFile('img1.bmp'); Bmp.Transparent := True; Gif.Add(Bmp); Bmp.LoadFromFile('img2.bmp'); Bmp.Transparent := True; Gif.Add(Bmp); Bmp.LoadFromFile('img3.bmp'); Bmp.Transparent := True; Gif.Add(Bmp); // add netscape loop if we want animation to keep repeating TGIFAppExtNSLoop.Create(Gif.Images.Frames[0]).Loops := 0; Gif.Pack; Gif.SaveToFile('test.gif'); finally Bmp.Free; Gif.Free; end; end; |
AW: Bitmaps als Gif mit animation speichern
@tomkupitz
OK, jetzt habe ich es verstanden (Anpassung der FTGifAnimate-Parts). Cool! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 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