From 61a8dea02dac7954514ed35b1f0861d8a3aeb5f8 Mon Sep 17 00:00:00 2001
From: Riley McGee <mcgeer@mcmaster.ca>
Date: Tue, 15 Nov 2016 13:03:39 -0500
Subject: [PATCH] Added Modularity via Folders, Added Save Functionality to
 Model

---
 src/Gifitti/Gifitti/Gifitti.csproj            | 13 ++++---
 src/Gifitti/Gifitti/{ => Models}/GifImage.cs  |  2 +-
 src/Gifitti/Gifitti/{ => Models}/GifModel.cs  | 37 ++++++++++++++++++-
 src/Gifitti/Gifitti/Program.cs                |  1 +
 .../{ => View_Models}/Form1.Designer.cs       |  2 +-
 .../Gifitti/{ => View_Models}/Form1.cs        |  5 ++-
 .../Gifitti/{ => View_Models}/Form1.resx      |  0
 7 files changed, 50 insertions(+), 10 deletions(-)
 rename src/Gifitti/Gifitti/{ => Models}/GifImage.cs (98%)
 rename src/Gifitti/Gifitti/{ => Models}/GifModel.cs (75%)
 rename src/Gifitti/Gifitti/{ => View_Models}/Form1.Designer.cs (99%)
 rename src/Gifitti/Gifitti/{ => View_Models}/Form1.cs (98%)
 rename src/Gifitti/Gifitti/{ => View_Models}/Form1.resx (100%)

diff --git a/src/Gifitti/Gifitti/Gifitti.csproj b/src/Gifitti/Gifitti/Gifitti.csproj
index 70d710d..4c23492 100644
--- a/src/Gifitti/Gifitti/Gifitti.csproj
+++ b/src/Gifitti/Gifitti/Gifitti.csproj
@@ -50,17 +50,17 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Form1.cs">
+    <Compile Include="View_Models\Form1.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="Form1.Designer.cs">
+    <Compile Include="View_Models\Form1.Designer.cs">
       <DependentUpon>Form1.cs</DependentUpon>
     </Compile>
-    <Compile Include="GifImage.cs" />
-    <Compile Include="GifModel.cs" />
+    <Compile Include="Models\GifImage.cs" />
+    <Compile Include="Models\GifModel.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <EmbeddedResource Include="Form1.resx">
+    <EmbeddedResource Include="View_Models\Form1.resx">
       <DependentUpon>Form1.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
@@ -86,6 +86,9 @@
   <ItemGroup>
     <None Include="App.config" />
   </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Transformation\" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/src/Gifitti/Gifitti/GifImage.cs b/src/Gifitti/Gifitti/Models/GifImage.cs
similarity index 98%
rename from src/Gifitti/Gifitti/GifImage.cs
rename to src/Gifitti/Gifitti/Models/GifImage.cs
index afb4125..adc25bc 100644
--- a/src/Gifitti/Gifitti/GifImage.cs
+++ b/src/Gifitti/Gifitti/Models/GifImage.cs
@@ -6,7 +6,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Gifitti
+namespace Gifitti.Models
 {
     class GifImage
     {
diff --git a/src/Gifitti/Gifitti/GifModel.cs b/src/Gifitti/Gifitti/Models/GifModel.cs
similarity index 75%
rename from src/Gifitti/Gifitti/GifModel.cs
rename to src/Gifitti/Gifitti/Models/GifModel.cs
index a2539c7..09ae8ca 100644
--- a/src/Gifitti/Gifitti/GifModel.cs
+++ b/src/Gifitti/Gifitti/Models/GifModel.cs
@@ -7,10 +7,11 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Gifitti
+namespace Gifitti.Models
 {
     class GifModel
     {
+        public Image gifImage { get; set; }
         public Image originalGif { get; private set; }
         private FrameDimension dimension;
         public int numberOfFrames { get; private set; }
@@ -26,6 +27,7 @@ namespace Gifitti
         {
             //Save the original Gif
             originalGif = Image.FromFile(path);
+            this.gifImage = originalGif.Clone() as Image;
             dimension = new FrameDimension(originalGif.FrameDimensionsList[0]);
             frameConstruction(originalGif);
         }
@@ -43,6 +45,39 @@ namespace Gifitti
             }
         }
 
+        public void resetToOriginalGif()
+        {
+            gifImage = originalGif;
+        }
+
+        /// <summary>
+        /// Takes the full path of a GIF save location, 
+        /// extension included
+        /// </summary>
+        /// <param name="path">String representation of path to save the gif to. 
+        ///     Name and extension of gif mandatory.
+        /// </param>
+        public void saveGif(string path)
+        {
+            //TODO take in image setting components as well as frames being viewed etc.
+            //Build GIF
+            using (MagickImageCollection collection = new MagickImageCollection())
+            {
+                for (int i = 0; i < frames.Length; i++)
+                    collection.Add(new MagickImage(frames[i] as Bitmap));
+                
+                // Maximize Colour saturation
+                QuantizeSettings settings = new QuantizeSettings();
+                settings.Colors = 256;
+                collection.Quantize(settings);
+
+                // Optimized the GIF being exported
+                collection.Optimize();
+                // Save GIF to path
+                collection.Write(path);
+            }
+        }
+
         public void resizeGif(int newWidth, int newHeight)
         {
             using (MagickImageCollection collection = new MagickImageCollection())
diff --git a/src/Gifitti/Gifitti/Program.cs b/src/Gifitti/Gifitti/Program.cs
index ed285ea..5c3a3c9 100644
--- a/src/Gifitti/Gifitti/Program.cs
+++ b/src/Gifitti/Gifitti/Program.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using Gifitti.View_Models;
 
 namespace Gifitti
 {
diff --git a/src/Gifitti/Gifitti/Form1.Designer.cs b/src/Gifitti/Gifitti/View_Models/Form1.Designer.cs
similarity index 99%
rename from src/Gifitti/Gifitti/Form1.Designer.cs
rename to src/Gifitti/Gifitti/View_Models/Form1.Designer.cs
index 83f112f..9955817 100644
--- a/src/Gifitti/Gifitti/Form1.Designer.cs
+++ b/src/Gifitti/Gifitti/View_Models/Form1.Designer.cs
@@ -1,4 +1,4 @@
-namespace Gifitti
+namespace Gifitti.View_Models
 {
     partial class Form1
     {
diff --git a/src/Gifitti/Gifitti/Form1.cs b/src/Gifitti/Gifitti/View_Models/Form1.cs
similarity index 98%
rename from src/Gifitti/Gifitti/Form1.cs
rename to src/Gifitti/Gifitti/View_Models/Form1.cs
index 2be8fe4..9b48bde 100644
--- a/src/Gifitti/Gifitti/Form1.cs
+++ b/src/Gifitti/Gifitti/View_Models/Form1.cs
@@ -9,8 +9,9 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using Gifitti.Models;
 
-namespace Gifitti
+namespace Gifitti.View_Models
 {
     public partial class Form1 : Form
     {
@@ -43,7 +44,7 @@ namespace Gifitti
 
                     gm = new GifModel(file);
                     gm.ReverseAtEnd = false;
-                    Image loadedGif = Image.FromFile(file);
+                    Image loadedGif = gm.gifImage;
                     globalGif = loadedGif;
                     //gifView.Image = loadedGif;
 
diff --git a/src/Gifitti/Gifitti/Form1.resx b/src/Gifitti/Gifitti/View_Models/Form1.resx
similarity index 100%
rename from src/Gifitti/Gifitti/Form1.resx
rename to src/Gifitti/Gifitti/View_Models/Form1.resx
-- 
GitLab