none
Gif, Byte ve Zaman İlişkisi Hakkında Bilgi Verir Misiniz? RRS feed

  • Genel Tartışma

  • Öncelikle byte'lar hakkında yeterli bir bilgim olmadığını belirteyim. Detaylı olarak nereden bilgi edinebilirim onu da söylerseniz sevinirim. Amacım bilgi edinmek...

    İlk olarak bahsedeceğim şey şu;

    Resimleri byte'a dönüştürüp, byte'ları da geciktirerekten gif'e dönüştürdüğüm bir kod yazdım (daha doğrusu yazılmışı modifiye ettim); 

            private byte[] Delay = { 255, 0 };
            private void button3_Click(object sender, EventArgs e)
            {
                string JpegFolder = @"C:\Users\onder\Desktop\Yeni";
                string GifFile = @"C:\Users\onder\Desktop\tenor4.gif";
                string[] Files = Directory.GetFiles(JpegFolder, "*.jpg");
                MemoryStream MS = new MemoryStream();
                BinaryWriter BW = new BinaryWriter(new FileStream(GifFile, FileMode.Create));
                Image.FromFile(Files[0]).Save(MS, ImageFormat.Gif);
                byte[] B = MS.ToArray();              
                B[10] = (byte)(B[10] & 0X78); //No global color table.                                         BU KISIM
                BW.Write(B, 0, 13);                                                                                           BU KISIM

                for (int I = 1; I < Files.Length; I++)
                {
                    MS.SetLength(0);
                    Image.FromFile(Files[I]).Save(MS, ImageFormat.Gif);
                    B = MS.ToArray();
                    WriteGifImg(B, BW);
                }
                BW.Close();
                MS.Dispose();            
            }
            public void WriteGifImg(byte[] B, BinaryWriter BW)                                                  BU KISIM
            {
                B[785] = Delay[0]; //5 secs delay
                B[786] = Delay[1];
                B[798] = (byte)(B[798] | 0X87);
                BW.Write(B, 781, 18);
                BW.Write(B, 13, 768);
                BW.Write(B, 799, B.Length - 800);
            }

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c4252c8-8274-449c-ad9b-e4f07a8f8cdd/how-could-i-create-an-animated-gif-file-from-several-other-jpg-files-in-c-express?forum=csharpgeneral 'a da bakmanızı isterim. Gerçi çok bir fark yok fakat, bazı yerleri çıkarttım. Çıkartmış olduğum yerler olmadan da işi gerçekleştirse de, çıkarmamam gereken bir yer varsa söylerseniz sevinirim.

    Şimdi esas öğrenmek istediklerim. "Bu Kısım" diye belirtmiş olduğum yerler..

    Özellikle de, gecikmenin gif'e işlendiği kısmı bir türlü çözemedim. Çünkü, başta da dediğim gibi byte'lar nasıl işliyor, 0 ile 255 aralığındaki değerlerin spesifik bir anlamı var mı, byte'ları birleştirirken nelere dikkat etmek gerekir gibi soruların cevabını bilmediğimden ilerleyemedim. Mesela, gecikmeyi arttırmak veya azaltmak için ne yapmak lazım? Bunun gibi işleyişle ilgili bilgi verebilecek varsa memnun olurum. Ayrıca, orada "5 secs delay" dese de, resimler arasında 3 saniye gibi bir gecikme söz konusu belirteyim.

    Bu arada, bunu anlamaya çalışmamın esas nedeni; gif'i yeniden boyutlandırmak. Bunun için de, resimler arasındaki gecikmeyi mili saniye cinsinden şu şekilde;

            private void button4_Click(object sender, EventArgs e)
            {
                PropertyItem item = image.GetPropertyItem(0x5100); // FrameDelay in libgdiplus
                // Time is in milliseconds
                int delay = (item.Value[0] + item.Value[1] * 256) * 10;
                MessageBox.Show(delay.ToString());
            }

    öğrenip, yeni oluşturacağım gif'i bu mili saniye üzerinden oluşturmaya çalışacağım. Yardımcı olursanız sevinirim.

    Ek: Hesabınız onaylanmadan önce gövde metni resim veya bağlantı içeremez.

    mesajı aldım. Mail'e baktım ama bir şey bulamadım. Ayarlara mail adresini girdim onaylama da yaptırdım ama sonuç değişmedi. O yüzden taslak olarak gönderemiyor, bağlantı oluşturamıyorum kusura bakmayın..



    19 Nisan 2020 Pazar 01:59