Son zamanlarda, animasyonlu GIFs
çerçevelerinin (Bit eşlem ve süresinin) yüklenmesi hakkında bir SO question numaralı yanıt vermeye çalışıyordum. Kod pastenbin adresinde bulunabilir.MonoMac System.Drawing.Image.GetPropertyItem (0x5100)
benim dev kütüphane içine geçmeden önce bu kodun üzerinde ilave testler yaparken, ben bu kod satırı ile bir sorun olduğunu fark ettik:
//Get the times stored in the gif
//PropertyTagFrameDelay ((PROPID) 0x5100) comes from gdiplusimaging.h
//More info on http://msdn.microsoft.com/en-us/library/windows/desktop/ms534416(v=vs.85).aspx
var times = img.GetPropertyItem(0x5100).Value;
bu kullanarak, Windows .NET bu çalışan (example GIF), dizi, animasyonlu GIF
'daki karelerin miktarı ile aynı boyuttadır ve çerçevelerin süreleriyle doldurulur. (BitConverter.ToInt32()) sürelere dönüştüren bu durumda bir bayt [20]: Monomac üzerinde
[75,0,0,0,125,0,0,0,125,0,0,0,125,0,0,0,250,0,0,0]
Ancak aynı örnek için kod bu hat sadece GIF dönüştüren bir byte[4]
döndürür bir süresi (birinci):
[75,0,0,0]
I10 farklı GIF's
için test edilmiş ve sonuç her zaman aynıdır. MonoMac sadece ilk süresini listelerken Windows'ta bütün süreler, byte [] içindedir:
[x,0,0,0]
[75,0,0,0]
[50,0,0,0]
[125,0,0,0]
Mono
System.Drawing.Image
source code baktığımızda, uzunluğu
GDI sarıcı bu yöntemde, ayarlanabilir görünmektedir:
status = GDIPlus.GdipGetPropertyItemSize (nativeObject, propid,out propSize);
Bununla birlikte, gerçekten, uygulamamdaki gibi kaynak ile ilgili herhangi bir sorun görmüyorum. Bir şeyi mi özledim yoksa bu bir böcek mi?
Mono GDI Plus uygulamasında cevabı bulacağınıza inanıyorum. Şuna bir baktım ama ne olup bittiğini deşifre etmek için gif kodeki uzmanlığım yok. Aşağıda bulduğum şeylerden bazıları. [Image.FromFile] (https://github.com/mono/mono/blob/master/mcs/class/System.Drawing/System.Drawing/Image.cs) [libgdiplus] 'a (https: // github. com/mono/libgdiplus/ağaç/ana/src). İç libgdiplus görüntüleri yüklemek için fonksiyonlardır. [Gifcodec.c] dosyasının içinde gdip_load_gif_image işlevi (https://github.com/mono/libgdiplus/blob/master/src/gifcodec.c) gif görüntüleri yükler. –
"gdip_load_gif_image" öğesinin içinde neler olduğuna bakmanız gerekecek. Bahsettiğim gibi, resmin yüklendiği/kodu çözüldüğü ve hatanın nerede olduğunu tahmin edeceğim yer burasıdır. Neler olup bittiğini anlamak için GIF uzmanlığım yok. İyi şanslar. –