AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bitmaps als Gif mit animation speichern

Bitmaps als Gif mit animation speichern

Ein Thema von thomas2009 · begonnen am 4. Mär 2011 · letzter Beitrag vom 5. Mär 2022
Antwort Antwort
thomas2009
(Gast)

n/a Beiträge
 
#1

Bitmaps als Gif mit animation speichern

  Alt 4. Mär 2011, 11:23
Hi
ich suche eine Funktion (kostenlos oder egal) um ein animiertes Gif-Bild zu erstellen

Geändert von thomas2009 ( 4. Mär 2011 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Bitmaps als Gif mit animation speichern

  Alt 4. Mär 2011, 14:03
Seit Delphi 2010 (oder Delphi 2009) ist TGifImage (in der Unit gifimage) in den VCL-Source übernommen worden. Die Komponente stammt von hier. Dort meine ich auch mal eine Demo gefunden zu haben, in gezeigt wird, wie man Images zu einer GIF-Animation zusammenfügen und speichern kann.

-- EDIT
Habe gerade nochmals nachgeschaut und bin hier fündig geworden
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k ( 4. Mär 2011 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Chriscode

Registriert seit: 18. Aug 2009
32 Beiträge
 
#3

AW: Bitmaps als Gif mit animation speichern

  Alt 10. Feb 2012, 15:35
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

(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)
Chris
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#4

AW: Bitmaps als Gif mit animation speichern

  Alt 28. Jan 2014, 22:33
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

Das ist ganz genau das, was ich brauche, um ein Smiley-Programm fertig stellen zu können.

Erheblich besser als dieser aufgeblähte Ballast, den man mit der zudem fehlerbehafteten Jedi-Bibliothek rumschleppen müßte.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Bitmaps als Gif mit animation speichern

  Alt 4. Mär 2022, 23:59
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?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

AW: Bitmaps als Gif mit animation speichern

  Alt 5. Mär 2022, 09:51
TGIFSubImage is now named TGIFFrame..
Wobei das hier deine TGIFSubImage class enthält.

Zitat:
Der obige Link führt zu einer Seite, wo man die Unit FTGifAnimate laden kann.
Zitat:
Requires the TGIFImage unit.
Und in dieser ist TGIFSubImage class enthalten.

Geändert von venice2 ( 5. Mär 2022 um 13:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Bitmaps als Gif mit animation speichern

  Alt 5. Mär 2022, 15:21
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?
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
319 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Bitmaps als Gif mit animation speichern

  Alt 5. Mär 2022, 16:19
Hallo Harry,

ich habe das so gelöst (schon etwas her):

Code:
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;
Beste Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Bitmaps als Gif mit animation speichern

  Alt 5. Mär 2022, 16:38
Danke Dir.

Unter

https://stackoverflow.com/questions/...sing-tgifimage

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;
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Bitmaps als Gif mit animation speichern

  Alt 5. Mär 2022, 18:15
@tomkupitz

OK, jetzt habe ich es verstanden (Anpassung der FTGifAnimate-Parts). Cool!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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