2013-01-03 201 views
2

我在窗體上的PictureBox中有一個動畫GIF,但它總是循環播放,我怎麼才能讓它只播放一次?動畫GIF不會停止循環Winforms

在其他程序(例如瀏覽器)中查看gif時,它只會播放一次,因爲它應該。然而,在我的表單中,它始終循環,動畫的循環之間只有很短暫的停頓。

回答

4

我花了一段時間...在這裏,我獲取幀的數量和動畫的GIF,直到幀的結束。

Public Class Form1 

    Dim animatedImage As New Bitmap("a.gif") 
    Dim currentlyAnimating As Boolean = False 
    Dim framecounter As Integer = 0 
    Dim framecount As Integer 
    Dim framdim As Imaging.FrameDimension 
    Private Sub OnFrameChanged(ByVal o As Object, ByVal e As EventArgs) 
     PictureBox1.Invalidate() 
    End Sub 

    Sub AnimateImage() 
     If Not currentlyAnimating Then 
      ImageAnimator.Animate(animatedImage, New EventHandler(AddressOf Me.OnFrameChanged)) 
      currentlyAnimating = True 
     End If 
    End Sub 

    Private Sub PictureBox1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint 
     If framecounter < framecount Then 
      AnimateImage() 
      ImageAnimator.UpdateFrames() 
      e.Graphics.DrawImage(Me.animatedImage, New Point(0, 0)) 
      framecounter += 1 
     End If 
    End Sub 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     framdim = New Imaging.FrameDimension(animatedImage.FrameDimensionsList(0)) 
     framecount = animatedImage.GetFrameCount(framdim) 
    End Sub 

End Class 
+0

感謝你們兩位!基本上相同的答案:) – Sparrowhawk

1

如果您可以確定週期的長度,則可以在適當的時間後禁用圖片框來停止動畫。

編輯:審查PictureBox源代碼後,它看起來不像有一種方法來修改圖片框本身的這種行爲。

但是,似乎確實存在一個可行的替代方案:ImageAnimator類,這是PictureBox內部使用的類。 MSDN文章有一個如何動畫的好例子。

+0

嘗試過,但幀之間只有100ms,很難確保它在完全正確的位置停下來。一幀關閉,看起來不對。 – Sparrowhawk

+0

@ Sparrowhawk:更新了答案,以包含我發現的其他信息和其他方法。 –

0

這是一個相當簡單的解決方案。我爲動畫GIF的一個循環的總組合時間創建了一個計時器。當定時器停止時,它將圖像更改爲圖像框中的靜止圖像。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    PictureBox1.Image = Image.FromFile("c:\GIF\AnimatedGif.gif") 
    Timer1.Enabled = True 
End Sub 

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick 
    PictureBox1.Image = Image.FromFile("c:\GIF\StillImage.gif") 
    Timer1.Enabled = False 
End Sub