From 48b15540e75758d03c5f8b7783470831a0414e01 Mon Sep 17 00:00:00 2001
From: Riley McGee <mcgeer@mcmaster.ca>
Date: Mon, 28 Nov 2016 12:58:20 -0500
Subject: [PATCH] Playback is proper, resize fixed

---
 src/Gifitti/Gifitti/Models/GifModel.cs              | 10 +++++++++-
 src/Gifitti/Gifitti/Transformation/TransformGif.cs  |  7 ++-----
 src/Gifitti/Gifitti/View_Models/MainForm.cs         |  3 +--
 src/Gifitti/Gifitti/View_Models/SaveAsXbyYPrompt.cs |  4 +++-
 4 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/Gifitti/Gifitti/Models/GifModel.cs b/src/Gifitti/Gifitti/Models/GifModel.cs
index 05bbab1..24d544b 100644
--- a/src/Gifitti/Gifitti/Models/GifModel.cs
+++ b/src/Gifitti/Gifitti/Models/GifModel.cs
@@ -26,6 +26,8 @@ namespace Gifitti.Models
         private bool reverse;
         public int startFrame = 0;
         public int endFrame = 0;
+        internal int originalDelay;
+
         public int delay { get; set; } = 0;
 
         /// <summary>
@@ -36,6 +38,10 @@ namespace Gifitti.Models
         {
             //Save the original Gif
             originalGif = Image.FromFile(path);
+            PropertyItem item = originalGif.GetPropertyItem(0x5100); // FrameDelay in libgdiplus
+                                                             // Time is in 1/100ths of a second
+            originalDelay = (item.Value[0] + item.Value[1] * 256) * 10;
+            delay = originalDelay;
             this.gifImage = originalGif.Clone() as Image;
             dimension = new FrameDimension(originalGif.FrameDimensionsList[0]);
             frameConstruction(originalGif);
@@ -186,10 +192,12 @@ namespace Gifitti.Models
         /// </summary>
         /// <param name="index">Frame number to fetch</param>
         /// <returns>Frame number index in the model</returns>
-        public Image GetFrame(int index)
+        public Image GetFrame(int index, bool isResize = false)
         {
             originalGif.SelectActiveFrame(dimension, index);
             //find the frame
+            if(isResize)
+                return (Image)originalGif.Clone();
             return originalGif;
             //return a copy of it
         }
diff --git a/src/Gifitti/Gifitti/Transformation/TransformGif.cs b/src/Gifitti/Gifitti/Transformation/TransformGif.cs
index e7bdf34..8ca4566 100644
--- a/src/Gifitti/Gifitti/Transformation/TransformGif.cs
+++ b/src/Gifitti/Gifitti/Transformation/TransformGif.cs
@@ -26,10 +26,9 @@ namespace Gifitti.Transformation
             {
                 for (int i = 0; i < gm.numberOfFrames; i++)
                 {
-                    collection.Add(new MagickImage(gm.GetFrame(i) as Bitmap));
-                    //collection[i].AnimationDelay = (delay / 8);
+                    collection.Add(new MagickImage(gm.GetFrame(i, true) as Bitmap));
                     collection[i].Resize(newWidth, newHeight);
-                    gm.SetFrameFromImage(collection[i].ToBitmap(), i);
+                    gm.SetFrameFromImage(collection[i].ToBitmap() as Bitmap, i);
                 }
             }
         }
@@ -41,8 +40,6 @@ namespace Gifitti.Transformation
                 {
                     collection.Add(new MagickImage(gm.GetFrame(i) as Bitmap));
                     collection[i].AnimationDelay = (delay/10);
-                    
-
                 }
                 
                 //return collection;
diff --git a/src/Gifitti/Gifitti/View_Models/MainForm.cs b/src/Gifitti/Gifitti/View_Models/MainForm.cs
index 72d87ed..d357132 100644
--- a/src/Gifitti/Gifitti/View_Models/MainForm.cs
+++ b/src/Gifitti/Gifitti/View_Models/MainForm.cs
@@ -289,7 +289,6 @@ namespace Gifitti.View_Models
                 //set the initial frames in textbox
                 textBox1.Text = "0";
                 textBox2.Text = gm.numberOfFrames.ToString();
-                //Transformation.TransformGif.resizeGif(this.gm, 100, 100); //TODO: remove temporarily used for testing
             }
 
         }
@@ -314,7 +313,7 @@ namespace Gifitti.View_Models
         /// <param name="e"> Event arguments associated with this event. </param>
         private void GifFPSSliderUpdate(object sender, EventArgs e)
         {
-            gm.delay = (10-trackBar1.Value)*10;
+            gm.delay = (11-trackBar1.Value)*gm.originalDelay;
         }
 
         private void MenuItemResize(object sender, EventArgs e)
diff --git a/src/Gifitti/Gifitti/View_Models/SaveAsXbyYPrompt.cs b/src/Gifitti/Gifitti/View_Models/SaveAsXbyYPrompt.cs
index a2e8e4f..f159d7f 100644
--- a/src/Gifitti/Gifitti/View_Models/SaveAsXbyYPrompt.cs
+++ b/src/Gifitti/Gifitti/View_Models/SaveAsXbyYPrompt.cs
@@ -48,13 +48,15 @@ namespace Gifitti.View_Models
             Console.WriteLine(path);
             try
             {
+                TransformGif.resizeGif(gm, width, height);
                 gm.saveGif(path);
             }
             catch (DirectoryNotFoundException)
             {
+                TransformGif.resizeGif(gm, orignalWidth, originalHeight);
                 MessageBox.Show("Save Path Invalid!");
             }
-            TransformGif.resizeGif(gm, orignalWidth, originalHeight);
+            
             this.Close();
         }
 
-- 
GitLab