2011-02-11 9 views
0

挨拶、GTK#とPixbufAnimation反復

私はPixbufAnimationのGdk.PixbufAnimationIterを使用して問題を抱えています。コードは次のようなものだ:

Gdk.PixbufAnimation animation = new Gdk.PixbufAnimation(System.IO.Path.Combine([filepath], [filename])); 
Gdk.PixbufAnimationIter iter = animation.GetIter([Current Time as IntPtr]); 

は、ここで私はPixbufAnimation.Iter読んものです:

start_timeは、開始時間は、Python time.time()関数からの出力としてfloatとして を指定しています。 start_timeマーク アニメーションの開始 再生。

GTK#がtime.time()機能を持っていない、と私は次のことを試してみました:

long StartTime = DateTime.Now.Millisecond; 
IntPtr SysTime = new IntPtr (&StartTime); 
Gdk.PixbufAnimationIter iter = animation.GetIter(SysTime); 

しかし、それは一貫してすべての時間を取得していないようです。これから生成される数値は非常にランダムなように見えますが、おそらくメモリ内の間違ったアドレスから引っ張ってくるでしょう(推測するだけで、私には言わないでください)。

私はまたPixbufAnimationの別のドキュメントからこれを読んでいる:ショートカットとして

のstart_timeがNULLであれば、g_get_current_time() の 結果が自動的に使用されます。

ただし、コンパイラはIntPtrの値をNULLにすることを拒否します。

「現在の時間」は、アニメーションの表示を高速または低速にするなど、アニメーションを混乱させる場合にのみ使用されることも読んでいます。

誰でも私を助けることができますか?

答えて

2

IntPtr.ZeroをGetIterメソッドに渡す場合は、CメソッドにNULLを渡すのと同じにする必要があります。 start_timeパラメータはglib-sharpではまだバインドされていないGTimeValであるはずなので、このAPIはバインディングに少し不足しています。あなたは確かにこのためのバグを提出することができ、私たちはAPIを拡張することができます。たとえば、GetIter()オーバーロードを使用して、このシナリオをよりきれいに処理できます。

+0

ありがとう、面白いのは、元々IntPtr.Zeroを使用してコードをコンパイルしていたことですが、アニメーションが正しく表示されていないと感じました。しかし、そうではありません。デバッグを行うと、アニメーションが正しく反復され、正しいpixbufsと遅延時間を取得することがわかりますが、pixbufは初期化後にウィンドウに再描画できません。 Gtk.ImageやGdk.Imageを使用しないと、アニメーションを処理するオプションがほとんどなく、アルファカラーを追加する必要があるアニメーションがずっと少なくなっているようです。 – MrFreeman