Как остановить GIf анимацию в PictureBox по клику на сам PictureBox? - Visual Basic .NET/.NET 4.x

Узнай цену своей работы

Формулировка задачи:

Добрый день! Прошу помочь решить вопрос с GIF анимацией в PictureBox. Задумка такова: Проигрывается гифка и при клике на на PictureBox анимация прекращается (пауза), при повторном клике анимация продолжается.

Решение задачи: «Как остановить GIf анимацию в PictureBox по клику на сам PictureBox?»

textual
Листинг программы
Imports System.Drawing.Imaging
Public Class testGif2
    Private aniImage As Bitmap
    Private isStart As Boolean
    Private fd As FrameDimension
    Private jj, nn As Integer
    Private gifName As String
    Private Sub testGif2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        isStart = False
        gifName = "601443440.gif"
        aniImage = New Bitmap(gifName)
        If Not ImageAnimator.CanAnimate(aniImage) Then
            MsgBox("Объект не поддерживает анимацию!")
            Exit Sub
        End If
        fd = New FrameDimension(aniImage.FrameDimensionsList(0))
        nn = aniImage.GetFrameCount(fd)
        Timer1.Interval = NumericUpDown1.Value 'регулируем скорость прокрутки
        Timer1.Enabled = False
    End Sub
    Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
        isStart = Not isStart
        If isStart Then Timer1.Enabled = True
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'сохраняем текущий фрейм
        Dim fName As String = _
                   IO.Path.Combine(Application.UserAppDataPath, IO.Path.GetFileNameWithoutExtension(gifName) & _
                   "_fr" & jj.ToString & ".jpg")
        aniImage.Clone.Save(fName, ImageFormat.Jpeg)
    End Sub
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If isStart Then
            aniImage.SelectActiveFrame(fd, jj)
            Using Frames As New Bitmap(aniImage)
                PictureBox1.Image = Frames.Clone
            End Using
            jj += 1
            If jj = nn Then jj = 0
        End If
    End Sub
    Private Sub NumericUpDown1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles NumericUpDown1.ValueChanged
        Timer1.Interval = NumericUpDown1.Value
    End Sub
End Class

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы