static void CopyGif() { using (var dec = WicBitmapDecoder.Load(@"source.gif")) { var reader = dec.GetMetadataQueryReader(); Dump(reader); Console.WriteLine(); foreach (var frame in dec) { Console.WriteLine(frame.Size); reader = frame.GetMetadataReader(); Dump(reader); Console.WriteLine(); } using (var encoder = WICImagingFactory.CreateEncoder(dec.ContainerFormat)) { using (var file = File.OpenWrite("test.gif")) { var mis = new ManagedIStream(file); encoder.Initialize(mis); foreach (var frame in dec) { var newFrame = encoder.CreateNewFrame(); newFrame.Initialize(); var md = frame.GetMetadataReader().Enumerate(); using (var writer = newFrame.GetMetadataQueryWriter()) { writer.EncodeMetadata(md); // change delay here writer.SetMetadataByName("/grctlext/Delay", (ushort)5); } if (frame.Palette != null) { newFrame.SetPalette(frame.Palette.ComObject); } newFrame.WriteSource(frame.ComObject); newFrame.Item1.Commit(); } encoder.Commit(); } } } }
static void Dump(string path) { //using (var bmp = WicBitmapSource.Load(path)) //{ //} using (var dec = WicBitmapDecoder.Load(path)) { var reader = dec.GetMetadataQueryReader(); Dump(reader); Console.WriteLine(); foreach (var frame in dec) { Console.WriteLine(frame.Size); reader = frame.GetMetadataReader(); Dump(reader); Console.WriteLine(); } } }