From 7a17836eab5bc71d0917c14d0387a45ebdb5748c Mon Sep 17 00:00:00 2001 From: James South Date: Sun, 19 Oct 2014 13:56:23 +0100 Subject: [PATCH] Repeat count now reflects Property info Former-commit-id: 16d8dd7d7726797a13862e5c034aae97548800e0 Former-commit-id: df57de033d3d5586e4bd229a1da5c0cd8843b11f --- .../Imaging/Formats/GifEncoder.cs | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/ImageProcessor/Imaging/Formats/GifEncoder.cs b/src/ImageProcessor/Imaging/Formats/GifEncoder.cs index f93cd419b..a418c951e 100644 --- a/src/ImageProcessor/Imaging/Formats/GifEncoder.cs +++ b/src/ImageProcessor/Imaging/Formats/GifEncoder.cs @@ -277,8 +277,6 @@ namespace ImageProcessor.Imaging.Formats /// private void WriteHeaderBlock(Stream sourceGif, int w, int h) { - int count = this.repeatCount.GetValueOrDefault(0); - // File Header signature and version. this.WriteString(FileType); this.WriteString(FileVersion); @@ -296,13 +294,21 @@ namespace ImageProcessor.Imaging.Formats this.WriteColorTable(sourceGif); // Application Extension Header - this.WriteShort(ApplicationExtensionBlockIdentifier); - this.WriteByte(ApplicationBlockSize); - this.WriteString(ApplicationIdentification); - this.WriteByte(3); // Application block length - this.WriteByte(1); - this.WriteShort(count); // Repeat count for images. - this.WriteByte(0); // Terminator + int count = this.repeatCount.GetValueOrDefault(0); + if (count != 1) + { + // 0 means loop indefinitely. count is set as play n + 1 times. + count = Math.Max(0, count - 1); + this.WriteShort(ApplicationExtensionBlockIdentifier); + this.WriteByte(ApplicationBlockSize); + + this.WriteString(ApplicationIdentification); + this.WriteByte(3); // Application block length + this.WriteByte(1); + this.WriteShort(count); // Repeat count for images. + + this.WriteByte(0); // Terminator + } } ///