【问题标题】:GIF manipulation in vb.netvb.net 中的 GIF 操作
【发布时间】:2009-09-07 02:14:28
【问题描述】:

是否可以在没有外部代码库的情况下将 .gif 文件分成单独的帧,反之,将一组图像组合成一个?

我花了一段时间玩 System.Drawing 命名空间,但似乎无法弄清楚如何。

另外,我不知道要传递什么作为 GetFrameCount 的参数。我不知道他们所说的“维度”是什么意思,显然它不能为空。

此外,是否可以在不先拆分 gif 并以模仿播放的方式重新编译/显示的情况下对 gif 进行播放控制?

感谢您的帮助。

这是在 vb.net,2008 年。

编辑:如果没有外部库就不可能,那么最好使用什么?

【问题讨论】:

  • 我曾经找到一个 C# 免费库 + 可以做到这一点的源代码。但是当我将它转换成 VB.NET 以便我可以将它与我的程序合并时,我已经破坏了一些东西......对不起一个非常无用的答案,我很确定我在 CodeProject 上找到了原始库
  • 没关系,哈哈。 CodeProject 上的库是什么?

标签: vb.net animated-gif


【解决方案1】:

我使用了与此类似的代码,它工作得很好......我没有发明它,所以感谢做过的人(我已经忘记了)......(可能是here)。

Private Class Frame
    Public Property MilliSecondDuration As Integer
    Public Property Bitmap As Image
    Public Sub New(ByVal duration As Integer, ByVal img As Bitmap)
        Me.MilliSecondDuration = duration
        Me.Bitmap = img
    End Sub
End Class

Private Function SeparateGif() As Frame()

    Dim gif As Image = Image.FromFile("MyGif.gif")

    Dim fd As New Imaging.FrameDimension(gif.FrameDimensionsList()(0))
    Dim frameCount As Integer = gif.GetFrameCount(fd)
    Dim frames(frameCount) As Frame

    If frameCount > 1 Then
        Dim times() As Byte = gif.GetPropertyItem(&H5100).Value
        For i As Integer = 0 To frameCount - 1
            gif.SelectActiveFrame(fd, i)
            Dim length As Integer = BitConverter.ToInt32(times, 4 * i) * 10
            frames(i) = New Frame(length, New Bitmap(gif))
        Next
    End If

    Return frames

End Function

【讨论】:

    【解决方案2】:

    根据this forum post,.NET 不支持保存动画 GIF。所以不,如果没有外部代码库,这可能是不可能的。

    您反对外部库有什么特别的原因吗?

    【讨论】:

    • 这个用于商业项目,所以我想尽可能避免使用外部库。
    • 但我想我可以把这个开源,如果没有库是不可能的。
    • 如今许多开源库都允许在商业软件产品中使用。
    • 好的...你能给我找一个可以让我在商业上使用它的吗?感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2015-10-17
    • 1970-01-01
    • 2015-08-03
    • 2017-03-07
    相关资源
    最近更新 更多