Estoy usando TGifImage que se incluye con Delphi XE.TGifImage Transparency Issue
Lo que intento hacer es cargar un archivo GIF desde un archivo y extraer todos los marcos a un mapa de bits.
Esto es lo que he hecho hasta ahora:
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;
El problema que estoy enfrentando es con alguna cuestión de la transparencia con una gran cantidad de diferentes Gif, y también problemas de tamaño.
Aquí están algunos mapas de bits de ejemplo que se han guardado usando mi código anterior:
Como se puede ver, los resultados no son grandes, tienen problemas de tamaño y transparencia.
Sé que los archivos Gif en sí mismos no están dañados, porque puedo cargarlos a través de mi navegador web y se muestran correctamente sin falta.
¿Cómo puedo cargar un archivo GIF desde el archivo, asignar cada marco al mapa de bits sin perder ninguna calidad?
descubrí la forma en cómo se realizan los fotogramas clave. Está determinado por 'GraphicControlExtension.Disposal' para cada fotograma (si está disponible). Significa lo que el marco actual debería hacer con el búfer ya renderizado. Como fuente puedes usar algo más que 'TGIFRenderer', la clase que realmente renderiza las animaciones. Trataré de componer un ejemplo por la tarde (si alguien no fuera más rápido :-) Tengo que irme ahora ... – TLama