VS2010旗舰版VB.NET版本gif动画制作代码QZQ

Imports System.ComponentModel
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Collections.Generic

Imports System.Windows.Forms

Imports gif.Components

Public Class Form1

Private imagesPaths As New List(Of String)
Private currentImageIndex As Integer
Private timer1 As New Timer
Private gifImage As Image
Private sourceImage As Bitmap


Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    timer1.Interval = 100 ' 调整为 0.15 秒切换一张图片
    AddHandler timer1.Tick, AddressOf Timer1_Tick

    Timer2.Interval = 100 ' 调整为 0.15 秒切换一张图片
    AddHandler Timer2.Tick, AddressOf Timer2_Tick


End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Dim openFileDialog1 As New OpenFileDialog()
    openFileDialog1.Filter = "图片文件|*.jpg;*.png;*.bmp;*.gif" ' 注意:添加了 *.gif 以允许选择 GIF 图片
    openFileDialog1.Multiselect = True

    If openFileDialog1.ShowDialog() = DialogResult.OK Then
        imagesPaths.Clear()

        For Each filePath As String In openFileDialog1.FileNames
            imagesPaths.Add(filePath)
            ListBoxImages.Items.Add(Path.GetFileName(filePath))
        Next
    End If
End Sub

Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
    If imagesPaths.Count > 0 Then
        currentImageIndex = 0
        timer1.Start()
    Else
        MessageBox.Show("请先选择图片")
    End If



End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs)
    If currentImageIndex < imagesPaths.Count Then
        Dim imagePath = imagesPaths(currentImageIndex)
        Dim image As Image
        If Path.GetExtension(imagePath).ToLower() = ".gif" Then
            image = Image.FromFile(imagePath)
        Else
            image = New Bitmap(imagePath)
            ' 对非 GIF 图片进行缩放以适应 PictureBox
            Dim newWidth As Integer = PictureBox1.Width
            Dim newHeight As Integer = PictureBox1.Height
            Dim newImage As Image = New Bitmap(image, newWidth, newHeight)
            image = newImage
        End If

        PictureBox1.Image = image
        currentImageIndex += 1
    Else
        timer1.Stop()
        currentImageIndex = 0
    End If
End Sub

Private Sub Button4_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    If imagesPaths.Count > 0 Then
        currentImageIndex = 0
        timer2.Start()
    Else
        MessageBox.Show("请先选择图片")
    End If



End Sub

Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As EventArgs)
    If currentImageIndex < imagesPaths.Count Then
        Dim imagePath = imagesPaths(currentImageIndex)
        Dim image As Image
        If Path.GetExtension(imagePath).ToLower() = ".gif" Then
            image = image.FromFile(imagePath)
        Else
            image = New Bitmap(imagePath)
            ' 对非 GIF 图片进行缩放以适应 PictureBox
            Dim newWidth As Integer = PictureBox1.Width
            Dim newHeight As Integer = PictureBox1.Height
            Dim newImage As Image = New Bitmap(image, newWidth, newHeight)
            image = newImage
        End If

        PictureBox1.Image = image
        currentImageIndex += 1
    Else

        currentImageIndex = 0
    End If
End Sub

Private Sub Button5_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button5.Click
    ' 创建 Gif 

    Dim imagePath = imagesPaths(currentImageIndex)
    Dim image As Image

    ' 以下这行代码应该是 Image.FromFile(imagePath) 而不是 image.FromFile(imagePath)
    image = image.FromFile(imagePath)

    Dim outputFilePath As String = "a.gif"
    Dim gifdll As New AnimatedGifEncoder()
    gifdll.Start(outputFilePath)
    gifdll.SetDelay(100)
    ' 延迟间隔
    gifdll.SetRepeat(0)
    '-1:不循环,0:总是循环 播放   
    Dim i As Integer = 0
    ' 以下这行代码应该是 imagesPaths.Count 而不是 imagesPaths(currentImageIndex)
    Dim count As Integer = imagesPaths.Count
    While i < count
        gifdll.AddFrame(image.FromFile(imagesPaths(i)))
        i += 1
    End While
    gifdll.Finish()
End Sub



Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    ' 创建 Gif 
    Dim imageFilePaths As [String]() = New [String]() {"1.png", "9.png", "17.png", "23.png", "29.png"}
    Dim outputFilePath As [String] = "e.gif"
    Dim gifdll As New AnimatedGifEncoder()
    gifdll.Start(outputFilePath)
    gifdll.SetDelay(200)
    ' 延迟间隔
    gifdll.SetRepeat(0)
    '-1:不循环,0:总是循环 播放   
    Dim i As Integer = 0, count As Integer = imageFilePaths.Length
    While i < count
        gifdll.AddFrame(Image.FromFile(imageFilePaths(i)))
        i += 1
    End While
    gifdll.Finish()
End Sub

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    Timer2.Stop()
End Sub

End Class

Imports System.ComponentModel _ Public Class DSButton Private _ButtonColor As Color = Color.White Private SF As New System.Drawing.StringFormat Private _Text As String Public Property ButtonColor As Color Get Return _ButtonColor End Get Set(ByVal value As Color) _ButtonColor = value MakeRoundedRect(RoundRectValue, Me, Color.FromArgb(255, ButtonColor.R / 255 * 50, ButtonColor.G / 255 * 50, ButtonColor.B / 255 * 50)) End Set End Property Public Property RoundRectValue As Integer = 10 Private nIndex As Integer = 0 Private IsMouseEnter As Boolean = False Public Property IsShowAnimate As Boolean = False Public Property ButtonText As String Get Return _Text End Get Set(ByVal value As String) _Text = value MakeRoundedRect(RoundRectValue, Me, Color.FromArgb(255, ButtonColor.R / 255 * 50, ButtonColor.G / 255 * 50, ButtonColor.B / 255 * 50)) End Set End Property Private _TextColor As Color = Color.White Public Property TextColor As Color Get Return _TextColor End Get Set(ByVal value As Color) _TextColor = value MakeRoundedRect(RoundRectValue, Me, Color.FromArgb(255, ButtonColor.R / 255 * 50, ButtonColor.G / 255 * 50, ButtonColor.B / 255 * 50)) End Set End Property Private Sub DSButton_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SetStyle(ControlStyles.UserPaint, True) SetStyle(ControlStyles.AllPaintingInWmPaint, True) SetStyle(ControlStyles.ResizeRedraw, True) SetStyle(ControlStyles.Selectable, True) SF.LineAlignment = StringAlignment.Center SF.Alignment = StringAlignment.Center MakeRoundedRect(RoundRectValue, Me, Color.FromArgb(255, ButtonColor.R / 255 * 50, ButtonColor.G / 255 * 50, ButtonColor.B / 255 * 50)) End Sub Private Sub MakeRoundedRect(ByVal Rounded As Integer, ByVal Ct As Control, ByVal ButtonColor As Color) If Ct.BackgroundImage IsNot Nothing Then Ct.BackgroundImage.Dispose() Ct.BackgroundImage = New Bitmap(Ct.Width, Ct.Height) Dim WW, HH As Integer WW = Ct.Width - 1 HH = Ct.Height - 1 Using G As Graphics = Graphics.FromImage(Ct.BackgroundImage) G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias G.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit Using Gp As New Drawing2D.GraphicsPath Gp.AddArc(New Rectangle(0, 0, Rounded, Rounded), 180, 90) Gp.AddArc(New Rectangle(WW - Rounded, 0, Rounded, Rounded), -90, 90) Gp.AddArc(New Rectangle(WW - Rounded, HH - Rounded, Rounded, Rounded), 0, 90) Gp.AddArc(New Rectangle(0, HH - Rounded, Rounded, Rounded), 90, 90) Gp.AddLine(New Point(0, HH - Rounded), New Point(0, Rounded / 2)) Using Lg As New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(0, HH), ControlPaint.Dark(ButtonColor, 0.5), ButtonColor) G.FillPath(Lg, Gp) G.DrawPath(Pens.Black, Gp) End Using End Using WW = WW - 3 HH = HH - 3 Using Gp As New Drawing2D.GraphicsPath Gp.AddArc(New Rectangle(3, 3, Rounded, Rounded), 180, 90) Gp.AddArc(New Rectangle(WW - Rounded, 3, Rounded, Rounded), -90, 90) Gp.AddArc(New Rectangle(WW - Rounded, HH / 2 - Rounded - 1, Rounded, Rounded), 0, 90) Gp.AddArc(New Rectangle(3, HH / 2 - Rounded - 1, Rounded, Rounded), 90, 90) Using Lg As New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(0, HH / 2), Color.FromArgb(220, 255, 255, 255), Color.FromArgb(50, 255, 255, 255)) G.FillPath(Lg, Gp) End Using End Using Using Gp As New Drawing2D.GraphicsPath Gp.AddEllipse(New Rectangle(3, HH / 2 + 10, WW, HH / 2)) Using Lg As New Drawing2D.PathGradientBrush(Gp) Lg.CenterColor = Color.FromArgb(150, 255, 255, 255) Lg.SurroundColors = New Color() {Color.Transparent} Gp.FillMode = Drawing2D.FillMode.Winding G.FillPath(Lg, Gp) End Using End Using Try If _Text.Length 0 Then G.DrawString(_Text, Me.Font, New SolidBrush(TextColor), New Rectangle(0, 0, Me.Width, Me.Height), SF) Catch End Try End Using End Sub Private Sub DSButton_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick End Sub Private Sub DSButton_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown If e.Button = MouseButtons.Left Then MakeRoundedRect(RoundRectValue, Me, Color.Black) End If End Sub Private Sub DSButton_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseEnter If DesignMode = False Then IsMouseEnter = True Timer1.Enabled = True End If End Sub Private Sub DSButton_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave If DesignMode = False Then IsMouseEnter = False Timer1.Enabled = True End If End Sub Private Sub DSButton_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp MakeRoundedRect(RoundRectValue, Me, _ButtonColor) End Sub Private Sub DSButton_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged If Me.IsHandleCreated Then MakeRoundedRect(RoundRectValue, Me, ButtonColor) End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Select Case IsMouseEnter Case True If IsShowAnimate = True Then nIndex = IIf(nIndex + 30 >= 225, 255, nIndex + 30) If nIndex >= 255 Then Timer1.Enabled = False Else nIndex = 255 Timer1.Enabled = False End If Case False nIndex = IIf(nIndex - 20 <= 50, 50, nIndex - 20) If nIndex <= 50 Then Timer1.Enabled = False End Select Try MakeRoundedRect(RoundRectValue, Me, Color.FromArgb(255, ButtonColor.R / 255 * nIndex, ButtonColor.G / 255 * nIndex, ButtonColor.B / 255 * nIndex)) Catch End Try End Sub End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EYYLTV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值