Анимированный Gif в Bmp

gpic
Дата: 12.06.2009 21:24:50
Здравствуйте. Не получается извлечь из анимированного GIF изображения, с исходными цветами и правильным размером.

Код был взят с DRKB и немного исправлен.

procedure TForm1.Button1Click(Sender: TObject);
var
i, a: integer;
bm: TBItmap;
GIF:TGifImage;

begin
a := 0;
bm := TBItmap.Create;
GIF:=TGifImage.Create;

Gif.LoadFromFile(Edit1.Text);

bm.Height := GIF.Height;
bm.Width := GIF.Images.Count * GIF.width;
for i := 0 to GIF.Images.Count - 1 do
begin

GIF.ForceFrame:=i;
bm.Canvas.Draw(a, 0, GIF.Images.SubImages[i].Bitmap);
a:=a+GIF.Width;

end;

bm.SaveToFile('horse.bmp');
bm.free;
Gif.Free;

end;

http://dump.ru/file/2892041

В архиве,исходный анимированный molnia.gif и извлеченные изображения в виде спрайтов в molnia.bmp . Цвета искажены и размер кадров почему-то разный.

Также в архиве,исходный анимированный horse.gif и извлеченные изображения в виде спрайтов в horse.bmp . Цвета искажены, но с размером кадров все в порядке...

Буду благодарен,если подскажите куда копать=)
з.ы. В архиве лежат исходники.
Где то там
Дата: 13.06.2009 00:02:49
Не смотрел архив, да и смысла нет. Для того, чтобы понять ситуация изучите способы хранения отдельных фреймов в gif`е. В кратце так:
1. размер отдельного фрейма не обязаны равняться целому изображению. При этом в фрейме указано смещение от левой-верхней точки.
2. палитра такжа не обязана быть общей для всего файла, каждый фрейм может иметь свою.
gpic
Дата: 13.06.2009 00:08:48
Где то там
Не смотрел архив, да и смысла нет. Для того, чтобы понять ситуация изучите способы хранения отдельных фреймов в gif`е. В кратце так:
1. размер отдельного фрейма не обязаны равняться целому изображению. При этом в фрейме указано смещение от левой-верхней точки.


Спасибо,но в этих случаях все фреймы одинаковы по размеру. Извлек с помощью IrfanView.

автор
2. палитра такжа не обязана быть общей для всего файла, каждый фрейм может иметь свою.

Не подскажите,как работать с палитрой? Может есть готовый пример?

з.ы. Рекомендуемый майкрософтом GifMovieGear тоже нормально не может извлечь=) Отлично извлек IrfanView и Pro Motion 6(написан на делфи и в нем используется компонент GraphicEx,правда он вроде не поддерживает анимацию,видимо для др.форматов используют)

Спасибо за советы!
gpic
Дата: 13.06.2009 02:11:04
Где то там

1. размер отдельного фрейма не обязаны равняться целому изображению. При этом в фрейме указано смещение от левой-верхней точки.


Кажется я понял. Действительно,каждый кадр имеет разный размер. Видимо для уменьшения размера, повторяющиеся куски,берутся из 1 кадра.

Это получается, что мне нужно:
1 кадр - оставить как есть.
2 кадр - скопировать 1 кадр и наложить по координатам 2-й
3 кадр - скопировать 1 кадр и наложить по координатам 3-й
и т.д.

Верно?

А вот что делать с палитрой. Я новичек в программировании и найденный в сети пример,слишком пока сложен для меня в понимании=( Может есть у кого пример попроще?
Где то там
Дата: 13.06.2009 07:17:43
За основу берется именно нулевой фрейм и, если остальные меньше его, то последующие накладывабтся на НУЛЕВОЙ. Каждый фрейм может иметь свою палитру, но в целом выйти за пределы 256 цветов невозможно. А вообще советую посмотреть библиотеку RxLibrary. В ней хорошо описана работа с gif`ами.
gpic
Дата: 14.06.2009 18:54:04
Где то там
За основу берется именно нулевой фрейм и, если остальные меньше его, то последующие накладывабтся на НУЛЕВОЙ. Каждый фрейм может иметь свою палитру, но в целом выйти за пределы 256 цветов невозможно. А вообще советую посмотреть библиотеку RxLibrary. В ней хорошо описана работа с gif`ами.


Да, именно 0 я имел в виду=) Просто визуально-он 1 кадр=)
Спасибо Вам за советы,посмотрю хэлп по RxLib.
FlyD
Дата: 14.06.2009 19:21:52
gpic
Да, именно 0 я имел в виду=) Просто визуально-он 1 кадр=)
Слышал/читал историю о поиске на вакансию программера. Точность пересказа не гарантирую, но суть,
думаю, будет понятна.

Вобщем: каждому соискателю на собеседовании прежде всего давали маленький тест "посчитать до
10 вслух". Все считали: "1, 2, 3...". И только один посчитал: "0, 1, 2...". Его и рассматривали в
дальнейшем как кандидата. :)
Dim2000
Дата: 14.06.2009 19:34:34
FlyD
посчитать до 10 вслух

А начало отсчёта оговаривалось ;)?
FlyD
Дата: 14.06.2009 19:38:31
Dim2000
FlyD
посчитать до 10 вслух

А начало отсчёта оговаривалось ;)?
Есессна нет - вопрос с подвохом :)
Гаджимурадов Рустам
Дата: 14.06.2009 19:48:03

ОФФ

FlyD
Вобщем: каждому соискателю на собеседовании прежде всего давали маленький тест "посчитать до
10 вслух". Все считали: "1, 2, 3...". И только один посчитал: "0, 1, 2...". Его и рассматривали в
дальнейшем как кандидата. :)

Кретины. Не соискатели - работодатели.

FlyD> Есессна нет - вопрос с подвохом :)

Это не подвох, это вывих. Мозга.

Posted via ActualForum NNTP Server 1.4