我在窗體上的PictureBox中有一個動畫GIF,但它總是循環播放,我怎麼才能讓它只播放一次?動畫GIF不會停止循環Winforms
在其他程序(例如瀏覽器)中查看gif時,它只會播放一次,因爲它應該。然而,在我的表單中,它始終循環,動畫的循環之間只有很短暫的停頓。
我在窗體上的PictureBox中有一個動畫GIF,但它總是循環播放,我怎麼才能讓它只播放一次?動畫GIF不會停止循環Winforms
在其他程序(例如瀏覽器)中查看gif時,它只會播放一次,因爲它應該。然而,在我的表單中,它始終循環,動畫的循環之間只有很短暫的停頓。
我花了一段時間...在這裏,我獲取幀的數量和動畫的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
如果您可以確定週期的長度,則可以在適當的時間後禁用圖片框來停止動畫。
編輯:審查PictureBox源代碼後,它看起來不像有一種方法來修改圖片框本身的這種行爲。
但是,似乎確實存在一個可行的替代方案:ImageAnimator類,這是PictureBox內部使用的類。 MSDN文章有一個如何動畫的好例子。
嘗試過,但幀之間只有100ms,很難確保它在完全正確的位置停下來。一幀關閉,看起來不對。 – Sparrowhawk
@ Sparrowhawk:更新了答案,以包含我發現的其他信息和其他方法。 –
這是一個相當簡單的解決方案。我爲動畫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
感謝你們兩位!基本上相同的答案:) – Sparrowhawk