最近、私は別のSO の質問に答えようとしていましたGIFs
。コードはpastenbinにあります。
このコードを開発ライブラリに移動する前に追加のテストを行っているときに、次のコード行に問題があることに気付きました。
//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;
これを Windows .Net で実行する場合 ( GIF の例)、配列はアニメーションのフレーム数と同じサイズになりGIF
、フレームの持続時間で埋められます。この場合、(BitConverter.ToInt32()) 5期間に変換される byte[20]:
[75,0,0,0,125,0,0,0,125,0,0,0,125,0,0,0,250,0,0,0]
ただし、MonoMac では、同じ例の GIF に対する次のコード行は、byte[4]
1 つの期間 (最初) のみに変換される を返します。
[75,0,0,0]
これを 10 種類テストしましGIF's
たが、結果は常に同じです。Windows ではすべてのデュレーションが byte[] に含まれますが、MonoMac では最初のデュレーションのみがリストされます。
[x,0,0,0]
[75,0,0,0]
[50,0,0,0]
[125,0,0,0]
MonoSystem.Drawing.Image
ソース コードを見ると、長さはGDIラッパーであるこのメソッドで設定されているようです。
status = GDIPlus.GdipGetPropertyItemSize (nativeObject, propid,out propSize);
ただし、実装のようにソースに問題はありません。何か不足していますか、それともバグですか?