Я использую TGifImage, который входит в состав Delphi XE.TGifImage Transparency Issue
Что я пытаюсь сделать, это загрузить Gif из файла и извлечь все рамы в растровое изображение.
Это то, что я сделал до сих пор:
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;
Проблемы я столкнулся с некоторым вопросом прозрачности с большим количеством различного ГИФСА, а также размером проблемой.
Вот некоторые примеры растровых изображений, которые были сохранены с помощью моего кода выше:
Как вы можете видеть, что результаты не являются большими, они имеют проблемы размера и прозрачности.
Я знаю, что сами файлы Gif не повреждены, потому что я могу загрузить их через свой веб-браузер, и они отображаются правильно, без ошибок.
Как загрузить Gif из файла, назначить каждому кадру Bitmap без потери качества?
Я нашел способ, как реализуются ключевые кадры. Это определяется «GraphicControlExtension.Disposal» для каждого кадра (если доступно). Это означает, что текущий кадр должен делать с уже обработанным буфером. В качестве источника вы можете использовать то, что иначе, чем 'TGIFRenderer', класс, который фактически отображает анимацию. Я попытаюсь составить пример вечером (если кто-то не будет быстрее :-) Мне нужно идти сейчас ... – TLama