VB.net GIF动画(制作、拆解——优化代码,类库——5)

20 篇文章 1 订阅
17 篇文章 1 订阅

我之前写过一篇文章,是制作和拆解GIF的文章,但是代码写的太复杂,我看完了自己都笑了

这一次在类库里完成gif的制作与拆解

先引用dll,名字叫:Gif.Components,可以在百度上搜索下载得到下载Gif.Componentshttps://dlc2.pconline.com.cn/filedown_1609054_10722470/Bv6pnYGm/pconline1517912109089.rar

 下载完找到x86(32位),里面有Gif.Components.dll,如果需要x64,只要反编译得到C#源代码,再使用x64模式生成Gif.Components.dll(其实没有必要)

在类库中新建一个类,叫:GifMake

写:

 

 

 

 

Imports System.Drawing
Imports System.Windows.Forms

Public Class GifMake
    Protected Image As Imaging.FrameDimension
    Protected bmp As Bitmap
    Protected bmp2() As Bitmap
    Public AGE As New Gif.Components.AnimatedGifEncoder()

    ''' <summary>
    ''' 拆解gif,请直接调用
    ''' </summary>
    ''' <param name="gif">传入gif文件的绝对路径</param>
    ''' <param name="SavePath">传入保存文件的文件夹的绝对路径</param>
    ''' <param name="SaveName">保存文件的名称,可以不写,即直接传入""</param>
    ''' <param name="SaveStyle">保存文件的格式:例如.jpg;.png;.bmp</param>
    ''' <returns>null</returns>
    Public Function SplitGif(gif As String, SavePath As String, SaveName As String, SaveStyle As String)
        bmp = New Bitmap(gif)
        Image = New Imaging.FrameDimension(bmp.FrameDimensionsList(0))
        Dim bmp2(bmp.GetFrameCount(Image) - 1)
        For i As Integer = 0 To bmp2.Count - 1
            bmp.SelectActiveFrame(Image, i)
            bmp2(i) = New Bitmap(bmp)
        Next
        For i As Integer = 0 To bmp2.Count - 1
            bmp2(i).Save(SavePath & "\" & SaveName & i & "." & SaveStyle)
        Next
        Return vbNull
    End Function
    ''' <summary>
    ''' 合成GIF
    ''' </summary>
    ''' <param name="sleep">每一帧间隔的毫秒数</param>
    ''' <returns>null</returns>
    Public Function CraftGif(sleep As Integer)
        Dim open As New OpenFileDialog
        open.Filter = "图片文件|*.jpg;*.png;*.ico;*.bmp;*.jpeg;*.wmf;*.emf;*.gif"
        open.Title = "选择图片"
        open.Multiselect = True
        open.ShowDialog()
        If IO.File.Exists(open.FileName) = True Then
            Dim count As Integer
            count = open.FileNames.Count
            Dim save As New SaveFileDialog
            save.Filter = "GIF文件|*.gif"
            save.Title = "保存GIF"
            save.ShowDialog()
            AGE.Start(save.FileName)
            AGE.SetDelay(sleep)
            AGE.SetRepeat(0)
            Dim i As Integer = 0
            While i < count
                AGE.AddFrame(Drawing.Image.FromFile(open.FileNames(i)))
                Math.Max(Threading.Interlocked.Increment(i), i - 1)
            End While
            AGE.Finish()
        End If
        Return vbNull
    End Function


End Class

在主窗体调用

  Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        GDIgif.SplitGif("C:\Users\Administrator\Desktop\test.gif", "C:\Users\Administrator\Desktop", "", "jpg")
    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        GDIgif.CraftGif(200)
    End Sub

在函数段:SplitGif可以自己修改,这里没有什么正确的写法,可以仿照CraftGIF中写openFileDialog和saveFileDialog来保存图片

确实要比之前写的简洁了不少

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值