Tôi đang sử dụng TGifImage đi kèm với Delphi XE.Sự cố minh bạch TGifImage
Điều tôi đang cố gắng làm là tải một Gif từ một Tệp và trích xuất tất cả các khung thành một Ảnh bitmap.
Đây là những gì tôi đã làm cho đến nay:
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;
Vấn đề tôi đang phải đối mặt là với một số vấn đề minh bạch với rất nhiều định dạng GIF khác nhau, và cũng có vấn đề kích thước.
Dưới đây là một số ví dụ mà bitmap đã được cứu sử dụng mã của tôi trên:
Như bạn có thể thấy kết quả không tốt, họ có vấn đề kích thước và tính minh bạch.
Tôi biết bản thân tệp Gif không bị hỏng vì tôi có thể tải chúng qua trình duyệt web của tôi và chúng hiển thị chính xác mà không có lỗi.
Làm cách nào để tải Gif từ Tệp, gán từng khung cho Bitmap mà không làm mất chất lượng?
tôi phát hiện ra cách làm thế nào các khung chính được thực hiện. Nó được xác định bởi 'GraphicControlExtension.Disposal' cho mỗi khung (nếu có). Nó có nghĩa là khung hiện tại sẽ làm gì với bộ đệm đã được render. Là một nguồn, bạn có thể sử dụng những gì khác hơn 'TGIFRenderer', lớp thực sự hiển thị các hình động. Tôi sẽ cố gắng để soạn một ví dụ vào buổi tối (nếu ai đó sẽ không nhanh hơn :-) Tôi phải đi ngay bây giờ ... – TLama