0

ご挨拶、

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_timePython 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() 自動的に使用されます。

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

また、「現在の時刻」は、アニメーションの表示を速くしたり遅くしたりするなど、アニメーションを台無しにしようとしている場合にのみ使用されることも読みました。

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

4

1 に答える 1

2

GetIter メソッドに IntPtr.Zero を渡すと、C メソッドに NULL を渡すのと同じになります。正直に言うと、この API はバインディングが少し不足しています。start_time パラメータは、glib-sharp ではまだバインドされていない GTimeVal であると想定されているためです。これについてバグを報告していただければ、API を拡張できます。たとえば、このシナリオをより明確に処理するために、おそらく GetIter() オーバーロードを使用できます。

于 2011-02-14T18:07:28.263 に答える