Delphi Can
Android *.gif Dosya Oynatma. - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Android *.gif Dosya Oynatma. (/showthread.php?tid=5450)

Sayfalar: 1 2


Android *.gif Dosya Oynatma. - hayalyilmaz43 - 24-11-2020

Merhaba

windows android ios da arkası transparent ve loop-count u 1 olan gif dosyamı oynatmak istiyorum.

loop-count uda dikkate almalı bitince tekrar başlamamalı infinite değilse,

ve arka pilanı transparent yani oynatan obje arkadaki objeleride gösterebilmeli

bu problem nasıl çözülebilir?

bu link problemimi çözmüyor, kendi içinde sorunları mevcut.


Cvp: Android *.gif Dosya Oynatma. - Mr.Developer - 24-11-2020

Merhaba,
Şu bileşeni deneyin. işinize yarayabilir.
Eğitimim videolarımı hazırlarken gözüme çarpmıştı anlatımını yapmıştım.


Android *.gif Dosya Oynatma. - mrmarman - 24-11-2020

Biraz önce bir kurgu hazırladım sizin için denemeye değer diye düşündüm.

Boş bir proje açıp Forma bir adet TButton bir adet de TImage koyarak aşağıdaki kodu bir deneyin isterseniz. İşinizi göreceğini değerlendiriyorum.

* LoopCount (0) ise sürekli loop eder, (1) veya yukarısı ise sayı kadar tekrar eder.


Uses Vcl.Imaging.GIFImg;

var
  aGif      : Vcl.Imaging.GIFImg.TGIFImage;
  aRenderer : Vcl.Imaging.GIFImg.TGIFRenderer;
  aRect     : WinApi.Windows.TRect;

procedure TForm1.GifChange(Sender: TObject);
begin
  if (aRenderer.LoopMax > 0) and (aRenderer.LoopCount > aRenderer.LoopMax)
  then begin // aRenderer.LoopMax equals 0 means Infinite
    aRenderer.Animate := False;
    FreeAndNil( aRenderer );
    FreeAndNil( aGif      );
  end
  else aRenderer.Draw( Image1.Canvas, aRect );
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if NOT Assigned(aGif) then begin
    aGif := TGIFImage.Create;
    aGif.LoadFromFile( 'c:\ARMAN.Study\Downloads\ezgif.com-gif-maker.gif' );
    aGif.OnChange := GifChange;
  end;

  if Assigned(aRenderer) then FreeAndNil( aRenderer );
    aRenderer := TGIFRenderer.Create( aGif );

  aRect     := Rect(0, 0, aGif.Width, aGif.Height);
  aRect.offset((Image1.Width - aGif.Width) div 2, (Image1.Height- aGif.Height) div 2);

  aRenderer.Animate := True;
  aRenderer.StartAnimation;
  aRenderer.Draw(Image1.Canvas, aRect);

  aGif.Animate := True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned( aGif ) then begin
    aGif.Animate := False;
    FreeAndNil( aRenderer );
    FreeAndNil( aGif      );
  end;
end;



yqgbc6l7rkmpzslgmnxr.gif



Cvp: Android *.gif Dosya Oynatma. - hayalyilmaz43 - 25-11-2020

(24-11-2020, Saat: 20:13)Mr.Developer Adlı Kullanıcıdan Alıntı: Merhaba,
Şu bileşeni deneyin. işinize yarayabilir.
Eğitimim videolarımı hazırlarken gözüme çarpmıştı anlatımını yapmıştım.

teşekkürler.

(24-11-2020, Saat: 21:45)mrmarman Adlı Kullanıcıdan Alıntı: Biraz önce bir kurgu hazırladım sizin için denemeye değer diye düşündüm.

Boş bir proje açıp Forma bir adet TButton bir adet de TImage koyarak aşağıdaki kodu bir deneyin isterseniz. İşinizi göreceğini değerlendiriyorum.

* LoopCount (0) ise sürekli loop eder, (1) veya yukarısı ise sayı kadar tekrar eder.


Uses Vcl.Imaging.GIFImg;

var
  aGif      : Vcl.Imaging.GIFImg.TGIFImage;
  aRenderer : Vcl.Imaging.GIFImg.TGIFRenderer;
  aRect     : WinApi.Windows.TRect;

procedure TForm1.GifChange(Sender: TObject);
begin
  if (aRenderer.LoopMax > 0) and (aRenderer.LoopCount > aRenderer.LoopMax)
  then begin // aRenderer.LoopMax equals 0 means Infinite
    aRenderer.Animate := False;
    FreeAndNil( aRenderer );
    FreeAndNil( aGif      );
  end
  else aRenderer.Draw( Image1.Canvas, aRect );
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if NOT Assigned(aGif) then begin
    aGif := TGIFImage.Create;
    aGif.LoadFromFile( 'c:\ARMAN.Study\Downloads\ezgif.com-gif-maker.gif' );
    aGif.OnChange := GifChange;
  end;

  if Assigned(aRenderer) then FreeAndNil( aRenderer );
    aRenderer := TGIFRenderer.Create( aGif );

  aRect     := Rect(0, 0, aGif.Width, aGif.Height);
  aRect.offset((Image1.Width - aGif.Width) div 2, (Image1.Height- aGif.Height) div 2);

  aRenderer.Animate := True;
  aRenderer.StartAnimation;
  aRenderer.Draw(Image1.Canvas, aRect);

  aGif.Animate := True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned( aGif ) then begin
    aGif.Animate := False;
    FreeAndNil( aRenderer );
    FreeAndNil( aGif      );
  end;
end;



yqgbc6l7rkmpzslgmnxr.gif

teşekkürler.


Android *.gif Dosya Oynatma. - quiet1day - 24-04-2023

(24-11-2020, Saat: 20:13)Mr.Developer Adlı Kullanıcıdan Alıntı: Merhaba,
Şu bileşeni deneyin. işinize yarayabilir.
Eğitimim videolarımı hazırlarken gözüme çarpmıştı anlatımını yapmıştım.

Projeyi build ederken resimdeki hataları alıyorum
https://i.hizliresim.com/2nazh9t.png


Cvp: Android *.gif Dosya Oynatma. - RAD Coder - 25-04-2023

(24-04-2023, Saat: 21:33)quiet1day Adlı Kullanıcıdan Alıntı:
(24-11-2020, Saat: 20:13)Mr.Developer Adlı Kullanıcıdan Alıntı: Merhaba,
Şu bileşeni deneyin. işinize yarayabilir.
Eğitimim videolarımı hazırlarken gözüme çarpmıştı anlatımını yapmıştım.

Projeyi build ederken resimdeki hataları alıyorum
https://i.hizliresim.com/2nazh9t.png

1- Project Manager > Proje üzerinde sağ tuş ile Clean
2- Delphi IDE Project > Deployment ---> Revert To Default
3- Build


Android *.gif Dosya Oynatma. - quiet1day - 25-04-2023

(25-04-2023, Saat: 09:34)RAD Coder Adlı Kullanıcıdan Alıntı:
(24-04-2023, Saat: 21:33)quiet1day Adlı Kullanıcıdan Alıntı: Projeyi build ederken resimdeki hataları alıyorum
https://i.hizliresim.com/2nazh9t.png

1- Project Manager > Proje üzerinde sağ tuş ile Clean
2- Delphi IDE Project > Deployment ---> Revert To Default
3- Build

Cevabınız için teşekkürler . Aşamaları uyguladığımda ;
https://i.hizliresim.com/j033vqa.png
hatasını veriyor


Cvp: Android *.gif Dosya Oynatma. - RAD Coder - 26-04-2023

(25-04-2023, Saat: 17:35)quiet1day Adlı Kullanıcıdan Alıntı:
(25-04-2023, Saat: 09:34)RAD Coder Adlı Kullanıcıdan Alıntı: 1- Project Manager > Proje üzerinde sağ tuş ile Clean
2- Delphi IDE Project > Deployment ---> Revert To Default
3- Build

Cevabınız için teşekkürler . Aşamaları uyguladığımda ;
https://i.hizliresim.com/j033vqa.png
hatasını veriyor

[attachment=2341]

Sanırım sorun, AndroidManifest.template dosyasından kaynaklıydı. Dosyayı silince sorunsuz çalışıyor.
Örnek uygulamanın Delphi 11.3.1 ile çalışan hali ektedir.
[attachment=2340]


Android *.gif Dosya Oynatma. - quiet1day - 01-05-2023

(26-04-2023, Saat: 09:48)RAD Coder Adlı Kullanıcıdan Alıntı:
(25-04-2023, Saat: 17:35)quiet1day Adlı Kullanıcıdan Alıntı: Cevabınız için teşekkürler . Aşamaları uyguladığımda ;
https://i.hizliresim.com/j033vqa.png
hatasını veriyor



Sanırım sorun, AndroidManifest.template dosyasından kaynaklıydı. Dosyayı silince sorunsuz çalışıyor.
Örnek uygulamanın Delphi 11.3.1 ile çalışan hali ektedir.

Eklediğiniz dosyayı yüklemeye çalışıyorum olmuyor , clean ediyorum , lib'i revart ediyorum temiz build ediyorum tekrar deniyorum olmuyor bu delphi bana kafayı yedirecek.
https://i.imgyukle.com/img/2023/05/01/Q7SSK1.png
https://i.imgyukle.com/img/2023/05/01/Q7SHgs.png


Cvp: Android *.gif Dosya Oynatma. - RAD Coder - 02-05-2023

(01-05-2023, Saat: 16:24)quiet1day Adlı Kullanıcıdan Alıntı:
(26-04-2023, Saat: 09:48)RAD Coder Adlı Kullanıcıdan Alıntı: Sanırım sorun, AndroidManifest.template dosyasından kaynaklıydı. Dosyayı silince sorunsuz çalışıyor.
Örnek uygulamanın Delphi 11.3.1 ile çalışan hali ektedir.

Eklediğiniz dosyayı yüklemeye çalışıyorum olmuyor , clean ediyorum , lib'i revart ediyorum temiz build ediyorum tekrar deniyorum olmuyor bu  delphi bana kafayı yedirecek.
https://i.imgyukle.com/img/2023/05/01/Q7SSK1.png
https://i.imgyukle.com/img/2023/05/01/Q7SHgs.png

Eklediğiniz ekran resimleri görünmüyor.