Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Как преобразовать GIf в BMP, простым способом?


Автор: МММ 12.11.2002, 10:40
Надо программно это сделать!!!

Автор: Vit 12.11.2002, 14:31
В RxLib есть поддержка GIF - посмотреть как они это реализовали...

Автор: МММ 12.11.2002, 15:39
Спасибо, реализовал!!!

Автор: Vit 12.11.2002, 23:30
А теперь расскажи как?

Автор: МММ 15.11.2002, 10:13
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then
       begin
        ListBox1.Items:=opendialog1.Files;
        Edit2.Text:=inttostr(ListBox1.Items.Count);
       end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,a: integer;
bm: TBItmap;
begin
a:=0;
bm:=TBItmap.Create;
image1.Picture.LoadFromFile(listbox1.Items[0]);
bm.Height:= image1.Height;
bm.Width:= listbox1.Items.Count*image1.Picture.width;
for i:=0 to listbox1.Items.Count-1 do
begin
image1.Picture.LoadFromFile(listbox1.Items[i]);
bm.Canvas.Draw(a,0,image1.Picture.Graphic);
a:=a+image1.Picture.Height;
end;
//form1.Canvas.Draw(0,0,bm);
bm.SaveToFile(Edit1.Text+'.bmp');
bm.free;
end;


Этот код, делает следующее, загружаем в листбох список Gif файлов, затем это все дело обьединяетсяв один BMP файл,картинка к картинке, кто знает DirectX поймет для чего это надо (спрайты);
Сделал еще код, чтобы по файловов из GIF (анимированных) вытаскивало каждую картинку в отдельности, или записывалов отдельный BMP по очереди, кому надо, скину!!!

Автор: Vit 15.11.2002, 14:09
Бросай сюда, я помещу в FAQ

Автор: МММ 15.11.2002, 14:41
Код

procedure TForm1.Button4Click(Sender: TObject);
var
i,a: integer;
bm: TBItmap;
begin
a:=0;
bm:=TBItmap.Create;
bm.Height:= RxGIFAnimator1.Height;
bm.Width:= RxGIFAnimator1.Image.Count*RxGIFAnimator1.width;
for i:=0 to RxGIFAnimator1.Image.Count-1 do
begin
RxGIFAnimator1.FrameIndex:=i;
bm.Canvas.Draw(a,0,RxGIFAnimator1.Image.Frames[i].Bitmap);
a:=a+RxGIFAnimator1.Height;
end;
//form1.Canvas.Draw(0,0,bm);
bm.SaveToFile(Edit1.Text+'.bmp');
bm.free;
end;

из файловов GIF (анимированных) вытаскивает каждую картинку в отдельности, или записывает в отдельный BMP по очереди
Для этих программок нужен всеми любимый RX Lib !!!

Vit, только эти способы которые я сам сделал, в RX Lib  не заглядывал, может кто что лучьше предложит  :thumbs-up

Автор: gpic 12.6.2009, 15:26
Привет. Извините,что поднимаю старую тему, но мой вопрос пересекается с этой темой=)

Для начала, здесь немного неверен код:

Код

a:=a+RxGIFAnimator1.Height;


Нужно заменить на 
Код

a:=a+RxGIFAnimator1.Width;


Т.к. в bmp изображения становятся в ряд, то в случае,если высота анимированного gif'а меньше,чем его ширина -> спрайты будут накладываться друг на друга. В моем случае, спрайты будут идти подряд.

Но у меня появился вопрос. На некоторых анимированных гифах, при извлечении кадра, портятся цвета. Я даже не знаю что делать=( Пробовал программу MovieGear(ее рекомендует майкрософт),она тоже портит цвета при извлечении.
Нашел программу,которая правильно извлекает(cosmigo.com/promotion/index.php)- написана на delphi,использует graphicEx. Не знаю,какой компонент используется для анимированных гифов..

Прикреплю изображения в архиве:
horse.gif-анимированный gif
Horse.bmp -изображение с испорченными цветами (использовался исходник MMM из пред. поста)

Буду благодарен за помощь.

Update:
Код

В хэлпе написано:
Set CopyMode to affect the way graphical images are drawn onto the canvas. The CopyMode is used when copying an image from another canvas using the CopyRect method. CopyMode is also used by TBitmap objects when they draw themselves to a canvas.
 Use CopyMode to achieve a variety of affects when rendering an image. Achieve special effects like merged images and making parts of a bitmap transparent by combining multiple images with different CopyModes.


Видимо у меня получается изображение с прозрачностью? Как это исправить?

Автор: gpic 15.6.2009, 20:56
На другом форуме мне подсказали,что дело скорее всего в палитре. Вот только я не знаю как работать с палитрой. Может кто подсказать и показать пример?

з.ы. Никто не знает ответа или это слишком легко?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)