Hareketli GIF uzantılı dosyaların delphide kullanılması?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
unforgiven
Üye
Mesajlar: 75
Kayıt: 19 Eyl 2003 09:50
Konum: ANKARA

Hareketli GIF uzantılı dosyaların delphide kullanılması?

Mesaj gönderen unforgiven »

Hareketli GIF uzantılı dosyaların delphide kullanılması nasıl gerceklestırırız.
bunun için bir bilesen mi gerekıyor , yoksa kodla bu is tamam mı oluyor...


Teşekurler...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

rx Library içinde bu işi yapan bir bileşen vardı. http://www.torry.net

Rx Library artık geliştirilmiyor, Jedi VCL'in içine katıldı. Onu indirmek isterseniz http://www.delphi-jedi.org .

Kolay gelsin.
unforgiven
Üye
Mesajlar: 75
Kayıt: 19 Eyl 2003 09:50
Konum: ANKARA

tesekurler

Mesaj gönderen unforgiven »

tesekur ederım. buldum. ama delphi 5 in bileseni yok. sanırım bu gidisle 6 ı kuracam. tekrar tesekur ederım.
Kullanıcı avatarı
mehmet_turecan_cakmak
Üye
Mesajlar: 132
Kayıt: 02 Tem 2003 01:08
Konum: Afyon
İletişim:

hareketli gif

Mesaj gönderen mehmet_turecan_cakmak »

selam...

mustafa hocam bunu normal bir image nesnesi kullanarak yapamazmıyız yani hareketli gif resmini image göstermezmi...

kolay gele...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Animated Gif ve Jpeg gibi resim formatlarini hem veritabaninda saklamak hem de TImage ile gosterebilmek icin soyle bir kod kullaniyorum.

Secilen dosyayi ilgili tabloya kaydetmek icin:

Kod: Tümünü seç

  DTM_MAIN.OPD_RESIM.Filter:='jpeg ,gif ve bitmap formatındaki resimler|*.jpg;*.gif;*.bmp';
  if (DTM_MAIN.OPD_RESIM.Execute) then
  begin
    DTM_MUSTERI.QRY_MUSTERI.open;
    IMG_MUSTERI_FOTOGRAF.Picture.LoadFromFile(DTM_MAIN.OPD_RESIM.FileName);
    UpdateField(IMG_MUSTERI_FOTOGRAF.Picture.Graphic, DTM_MUSTERI.QRY_MUSTERIFOTOGRAF);
  end;
Tabloya atilan resmin tablo uzerinde hareket ettikce TImage ile gorunebilmesi icin de

Kod: Tümünü seç

  if ((Field <> nil) and (Field <> QRY_MUSTERIFOTOGRAF)) or
     ((QRY_MUSTERIFOTOGRAF.DataSet.State <> dsBrowse) and (QRY_MUSTERIFOTOGRAF.DataSet.State <> dsInsert)) or (FRM_MUSTERI=nil) then
    Exit;
  GetImage(QRY_MUSTERIFOTOGRAF,FRM_MUSTERI.IMG_MUSTERI_FOTOGRAF);
Burada kullanılan compeonent isimlerinin ilk 3 harflerinden ne tur componentler oldugu tahmin edilir saniyorum. kullnadigim 2 fonksiyon da su sekilde:

Kod: Tümünü seç

procedure UpdateField(Graphic: TGraphic; VAR_BLOB_FIELD:TBlobField);
var
  Stream		: TStream;
  Header		: TGraphicHeader;
begin
  VAR_BLOB_FIELD.DataSet.Edit;
  Stream := VAR_BLOB_FIELD.DataSet.CreateBlobStream(VAR_BLOB_FIELD, bmWrite);
  try
    // TBitmaps are saved in a special format which is compatible with
    // the TDBImage component...
    if (Graphic is TBitmap) and
      ((VAR_BLOB_FIELD.DataType = ftGraphic) or (VAR_BLOB_FIELD.DataType = ftTypedBinary)) then
    begin
      Stream.Write(Header, SizeOf(Header));
      Graphic.SaveToStream(Stream);
      Header.Count := 1;
      Header.HType := $0100;
      Header.Size := Stream.Position - SizeOf(Header);
      Stream.Position := 0;
      Stream.Write(Header, SizeOf(Header));
    end else
      // ...all other image formats are just saved to the BLOB stream
      Graphic.SaveToStream(Stream);
  finally
    Stream.Free;
  end;
  VAR_BLOB_FIELD.DataSet.Refresh;
end;

procedure GetImage(VAR_BLOB_FIELD:TBlobField; VAR_IMAGE:TImage);
var
  Stream		: TStream;
  Size			: integer;
  Header		: TGraphicHeader;
  Signature		: pointer;
  i			: integer;
  Image			: TGraphic;
  Name			: string;
begin
  Image := nil;
  // Database cursor has moved - Update image
  Stream := VAR_BLOB_FIELD.DataSet.CreateBlobStream(VAR_BLOB_FIELD, bmRead);
  try
    // Skip paradox image header
    Size := Stream.Size;
    
    if (Size >= SizeOf(TGraphicHeader)) then
    begin
      Stream.Read(Header, SizeOf(Header));
      if (Header.Count <> 1) or (Header.HType <> $0100) or
        (Header.Size <> Size - SizeOf(Header)) then
        Stream.Seek(-SizeOf(Header), soFromCurrent);
    end;

    try
      // Determine image type from file signature
      for i := low(Signatures) to high(Signatures) do
      begin
        if (length(Signatures[i].Signature) > Size) then
          continue;
        // Read signature
        GetMem(Signature, length(Signatures[i].Signature));
        try
          Stream.Read(Signature^, length(Signatures[i].Signature));
          // Reposition stream cursor
          Stream.Seek(-length(Signatures[i].Signature), soFromCurrent);
          // Compare signatures
          if (CompareMem(Signature, @Signatures[i].Signature[1], length(Signatures[i].Signature))) then
          begin
            Image := TGraphicHackClass(Signatures[i].ImageType).Create;
            Name := Signatures[i].Name;
            break;
          end;
        finally
          Freemem(Signature);
        end;
      end;

      // Force TImage to desired graphic type
//      ImageFish.Picture.Graphic := Image;
      VAR_IMAGE.Picture.Graphic := Image;

      // Load image from stream
//      if (ImageFish.Picture.Graphic <> nil) then
//        ImageFish.Picture.Graphic.LoadFromStream(Stream);
      if (VAR_IMAGE.Picture.Graphic <> nil) then
        VAR_IMAGE.Picture.Graphic.LoadFromStream(Stream);
    finally
      Image.Free;
    end;
  finally
    Stream.Free;
  end;
end;
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

tesekur ederım. buldum. ama delphi 5 in bileseni yok. sanırım bu gidisle 6 ı kuracam.
Biz de işyerinde Delphi 5 kullanıyoruz ve daha geçen hafta torry.net'ten indirip kurduk. Gir ve quick search kısmından "rx" diye arattır çıkar karşına.
mustafa hocam bunu normal bir image nesnesi kullanarak yapamazmıyız yani hareketli gif resmini image göstermezmi...
Göstermez.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

3.parti compoenet veya library'leri fazlaca kullaninca,Delphi ile mümkün olmadığı halde yapilan bir takim seylerin kaynağını da unutuyoruz. TImage ile Gif dosyalarini gosterebildiğimden emin olduğum icin Mustafa gösterilmez deyince bir kontrol edip yukaridaki kodu gonderdim. Fakat kontrol edince farkettim ki o kodun da calisabilmesi icin GIFImage.pas isimli bir baska dosyaya ihtiyac var. Uses listesine GIFImage yazilmasi gerekiyor. Bu dosyayi isteyene bu adresten alabilir.
http://www.mustafagundogan.com/fahrettin/GIFImage.zip

kolay gelsin...
EeCOMP
Üye
Mesajlar: 119
Kayıt: 13 Tem 2003 10:38
Konum: istanbul
İletişim:

Mesaj gönderen EeCOMP »

s.a abilerim
bende delphide gif oynatmaya çalışıyorum
rx bileşenlerinden rxgifanimatör kullanarak gifi delphiye ekledim
gif 4 adet resimin ard arda oynatılması ile oluşturuldu explorer ile açınca normal oynuyo ama delphi ile açınca 4 adet resim ard arda gösterilmek sureti ile oynatılıyo yani görüntü adım adım gidiyo bunu nasıl halledebilirim

windows xp sp2 ve delphi 6 kullanıyorum
yardımlarınız için şimdiden teşekkürler
s.a
Kainat dahi bir programdır ve şüphesiz onun bir programcısı vardır...
Kullanıcı avatarı
karflake
Üye
Mesajlar: 222
Kayıt: 15 Haz 2003 03:57

Mesaj gönderen karflake »

Bu GifImage.pas dosyası bu adresten edinilebilir. Bu arada Fahrettin Bey, forumdaki diğer bir mesajında, GifImage.pas'ı kullanabilmek için implementation bölümünün altında aşağıdaki tanımlamaların yapılması gerektiğini de yazmış:

Kod: Tümünü seç

type 
  TGraphicHeader = record 
    Count: Word;                { Fixed at 1 } 
    HType: Word;                { Fixed at $0100 } 
    Size: Longint;              { Size not including header } 
  end; 
 
  TGraphicHack = class(TGraphic); 
  TGraphicHackClass = class of TGraphicHack; 
 
  TImageSignature = record 
    ImageType: TGraphicClass; 
    Name: string; 
    Signature: string; 
  end; 
const 
  Signatures: array[0..2] of TImageSignature 
    = ((ImageType: TBitmap; Name: 'Bitmap'; Signature: 'BM'), 
       (ImageType: TGIFImage; Name: 'GIF'; Signature: 'GIF'), 
       (ImageType: TJPEGImage; Name: 'JPEG'; 
        Signature: chr($FF)+chr($D8)+chr($FF)+chr($E0)+chr($00)+chr($10)+'JFIF'));
Bu açıklamalar dahilinde dahi, Access veritabanından gif okutmayı başaramadım ama :(
semenderip
Üye
Mesajlar: 42
Kayıt: 04 Nis 2007 03:57

Mesaj gönderen semenderip »

benimde şöle bir sorum tamam jedi paketi içerisinde bulunan gifanimator ile forma gif yerleştiriyorum ve gayet güzel çalışıyor yalnız yapamak istediğim şöyle mesela formun üzerine bir resim koyup bunu formun transperent özelliğini kullanarak sadece resmin şeklini almasını saglıyoruzya aynısını gif için yapabilirmiyiz form sadece gifin şeklini alsın aslında yapıyorum fakat gifin arka resmide görünüyor normal bir image nesnesi gibi olmuyor biraz karısık anlattım galiba şimdiden sagolun
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Delphi 2008 gif desteği sunuyor
Jire
Üye
Mesajlar: 167
Kayıt: 07 Eki 2007 01:20

Mesaj gönderen Jire »

jvanimatedimage
jvcl componentlerinin içinde var istiyorsan kullan.
semenderip
Üye
Mesajlar: 42
Kayıt: 04 Nis 2007 03:57

Mesaj gönderen semenderip »

güzel kardeşim benim sorumu tam okumamışsın heralde zaten jvcxl kurulu ve gif dosyalarını oynatıyorum demek istediğim gif resmin hani bir arkaplanı vardır onun görünmesini istemiyorum veya şöyle anlatayım bir formun üzerine konulan resmin şeklini almasını için yaptıgımız işlemin aynısı gifler için mevcutmudur ben yapamadım yinede sagolun
Jire
Üye
Mesajlar: 167
Kayıt: 07 Eki 2007 01:20

Mesaj gönderen Jire »

semenderip yazdı:güzel kardeşim benim sorumu tam okumamışsın heralde zaten jvcxl kurulu ve gif dosyalarını oynatıyorum demek istediğim gif resmin hani bir arkaplanı vardır onun görünmesini istemiyorum veya şöyle anlatayım bir formun üzerine konulan resmin şeklini almasını için yaptıgımız işlemin aynısı gifler için mevcutmudur ben yapamadım yinede sagolun
ben sana yazmadımki :D
Gifler için mevcut olanı varmıdır bilmiyorum ama TMS Componentte advshaper var onda bmp yapabiliyon. :)
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Yanlış hatırlamıyoersam, image nesnesinin transparat özelliği mevcut. Resim de transparant ise, istediğinizin kod gerektirmeden yapılabilmesi gerek
Cevapla