2011-02-11 3 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 시작 시간은 파이썬 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