Ich verwende TGifImage, das in Delphi XE enthalten ist.TGifImage Transparenz Problem
Was ich versuche zu tun ist ein Gif aus einer Datei laden und extrahieren Sie alle Frames in eine Bitmap.
Das ist, was ich bisher getan:
procedure ExtractGifFrames(FileName: string);
var
Gif: TGifImage;
Bmp: TBitmap;
i: Integer;
begin
Gif := TGifImage.Create;
try
Gif.LoadFromFile(FileName);
Bmp := TBitmap.Create;
try
Bmp.SetSize(Gif.Width, Gif.Height);
for i := 0 to Gif.Images.Count - 1 do
begin
if not Gif.Images[i].Empty then
begin
Bmp.Assign(Gif.Images[i]);
Bmp.SaveToFile('C:\test\bitmap' + IntToStr(i) + '.bmp');
end;
end;
finally
Bmp.Free;
end;
finally
Gif.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
ExtractGifFrames(OpenPictureDialog1.FileName);
end;
end;
Das Problem, das ich bin vor ist mit einem gewissen Transparenz Problem mit vielen verschiedenen Gifs, und auch Größe Problemen.
Hier sind einige Beispiele Bitmaps, die meinen Code gespeichert wurden unter Verwendung von oben:
Wie Sie die Ergebnisse nicht so toll zu sehen sind, haben sie eine Größe und Fragen der Transparenz.
Ich weiß, die Gif-Dateien selbst sind nicht beschädigt, weil ich sie über meinen Webbrowser laden kann und sie korrekt ohne Fehler angezeigt werden.
Wie kann ich ein Gif aus File laden, jeden Frame Bitmap zuweisen, ohne Qualität zu verlieren?
ich die Art und Weise herausgefunden, wie der Schlüsselrahmen realisiert werden. Es wird durch 'GraphicControlExtension.Disposal' für jeden Frame (falls verfügbar) bestimmt. Es bedeutet, was der aktuelle Frame mit dem bereits gerenderten Puffer tun soll. Als Quelle können Sie etwas anderes als 'TGIFRenderer' verwenden, die Klasse, die die Animationen tatsächlich rendert. Ich werde versuchen abends ein Beispiel zu komponieren (wenn jemand nicht schneller wäre :-) muss ich jetzt gehen ... – TLama