I'm trying to write some code to export animated .gifs from a WPF application using GifBitmapEncoder. What I have so far works fine but when I view the resulting .gif it only runs once and then stops - I'd like to have it looping indefinitely.
I've found this previous similar question:
How do I make a GIF repeat in loop when generating with BitmapEncoder
However, he is using the BitmapEncoder from Windows.Graphics.Imaging rather than the Windows.Media.Imaging version, which seems to be a bit different. Nonetheless, that gave me a direction and after a bit more googling I came up with this:
Dim encoder As New GifBitmapEncoder
Dim metaData As New BitmapMetadata("gif")
metaData.SetQuery("/appext/Application", System.Text.Encoding.ASCII.GetBytes("NETSCAPE2.0"))
metaData.SetQuery("/appext/Data", New Byte() {3, 1, 0, 0, 0})
'The following line throws the exception "The designated BitmapEncoder does not support global metadata.":
'encoder.Metadata = metaData
If DrawingManager.Instance.SelectedFacing IsNot Nothing Then
For Each Frame As Frame In DrawingManager.Instance.SelectedFacing.Frames
Dim bmpFrame As BitmapFrame = BitmapFrame.Create(Frame.CombinedImage, Nothing, metaData, Nothing)
encoder.Frames.Add(bmpFrame)
Next
End If
Dim fs As New FileStream(newFileName, FileMode.Create)
encoder.Save(fs)
fs.Close()
Initially I tried adding the metadata directly to the encoder (as in the commented-out line in the code above), but at runtime that throws the exception "The designated BitmapEncoder does not support global metadata". I can instead attach my metadata to each frame, but although that doesn't crash it the resultant .gif doesn't loop either (and I would expect that the looping metadata would need to be global anyway).
Can anyone offer any advice?