From cc8511aec13fb131df05c7c02acd5329b692d7e9 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 21 Jun 2012 16:51:04 -0700 Subject: [PATCH] First draft of de-rezzing image processor --- .gitignore | 2 + DeRez/DeRez.csproj | 89 +++++++++ DeRez/Form1.Designer.cs | 198 +++++++++++++++++++ DeRez/Form1.cs | 263 +++++++++++++++++++++++++ DeRez/Form1.resx | 123 ++++++++++++ DeRez/Program.cs | 18 ++ DeRez/Properties/AssemblyInfo.cs | 36 ++++ DeRez/Properties/Resources.Designer.cs | 62 ++++++ DeRez/Properties/Resources.resx | 117 +++++++++++ DeRez/Properties/Settings.Designer.cs | 26 +++ DeRez/Properties/Settings.settings | 7 + 11 files changed, 941 insertions(+) create mode 100644 DeRez/DeRez.csproj create mode 100644 DeRez/Form1.Designer.cs create mode 100644 DeRez/Form1.cs create mode 100644 DeRez/Form1.resx create mode 100644 DeRez/Program.cs create mode 100644 DeRez/Properties/AssemblyInfo.cs create mode 100644 DeRez/Properties/Resources.Designer.cs create mode 100644 DeRez/Properties/Resources.resx create mode 100644 DeRez/Properties/Settings.Designer.cs create mode 100644 DeRez/Properties/Settings.settings diff --git a/.gitignore b/.gitignore index 20a0b4f..d3d2cfd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ _Resharper.*/ +*/obj/ +*/bin/ */*/obj/ */*/*/obj/ */*/*/*/obj/ diff --git a/DeRez/DeRez.csproj b/DeRez/DeRez.csproj new file mode 100644 index 0000000..1800dd7 --- /dev/null +++ b/DeRez/DeRez.csproj @@ -0,0 +1,89 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {32780320-1521-4F48-95BE-5F34A964E178} + WinExe + Properties + DeRez + DeRez + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/DeRez/Form1.Designer.cs b/DeRez/Form1.Designer.cs new file mode 100644 index 0000000..13d97f9 --- /dev/null +++ b/DeRez/Form1.Designer.cs @@ -0,0 +1,198 @@ +namespace DeRez { + partial class Form1 { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if ( disposing && (components != null) ) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.button1 = new System.Windows.Forms.Button(); + this.src = new System.Windows.Forms.PictureBox(); + this.dest = new System.Windows.Forms.PictureBox(); + this.pixelSize = new System.Windows.Forms.TextBox(); + this.darkThreshold = new System.Windows.Forms.TextBox(); + this.button2 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.targetWidth = new System.Windows.Forms.TextBox(); + this.targetHeight = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.src)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dest)).BeginInit(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(25, 467); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Go"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // src + // + this.src.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.src.Location = new System.Drawing.Point(25, 12); + this.src.Name = "src"; + this.src.Size = new System.Drawing.Size(339, 324); + this.src.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.src.TabIndex = 1; + this.src.TabStop = false; + // + // dest + // + this.dest.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.dest.Location = new System.Drawing.Point(379, 12); + this.dest.Name = "dest"; + this.dest.Size = new System.Drawing.Size(345, 324); + this.dest.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.dest.TabIndex = 2; + this.dest.TabStop = false; + // + // pixelSize + // + this.pixelSize.Location = new System.Drawing.Point(157, 390); + this.pixelSize.Name = "pixelSize"; + this.pixelSize.Size = new System.Drawing.Size(100, 20); + this.pixelSize.TabIndex = 3; + this.pixelSize.TextChanged += new System.EventHandler(this.pixelSize_TextChanged); + // + // darkThreshold + // + this.darkThreshold.Location = new System.Drawing.Point(157, 416); + this.darkThreshold.Name = "darkThreshold"; + this.darkThreshold.Size = new System.Drawing.Size(100, 20); + this.darkThreshold.TabIndex = 4; + this.darkThreshold.TextChanged += new System.EventHandler(this.darkThreshold_TextChanged); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(25, 342); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(138, 23); + this.button2.TabIndex = 5; + this.button2.Text = "Select input file"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(71, 390); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(50, 13); + this.label1.TabIndex = 6; + this.label1.Text = "Pixel size"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(71, 423); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(76, 13); + this.label2.TabIndex = 7; + this.label2.Text = "Dark threshold"; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // targetWidth + // + this.targetWidth.Location = new System.Drawing.Point(568, 389); + this.targetWidth.Name = "targetWidth"; + this.targetWidth.Size = new System.Drawing.Size(100, 20); + this.targetWidth.TabIndex = 8; + this.targetWidth.TextChanged += new System.EventHandler(this.targetWidth_TextChanged); + // + // targetHeight + // + this.targetHeight.Location = new System.Drawing.Point(568, 415); + this.targetHeight.Name = "targetHeight"; + this.targetHeight.Size = new System.Drawing.Size(100, 20); + this.targetHeight.TabIndex = 9; + this.targetHeight.TextChanged += new System.EventHandler(this.targetHeight_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(478, 389); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(66, 13); + this.label3.TabIndex = 10; + this.label3.Text = "Target width"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(478, 423); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(70, 13); + this.label4.TabIndex = 10; + this.label4.Text = "Target height"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(746, 579); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.targetHeight); + this.Controls.Add(this.targetWidth); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.button2); + this.Controls.Add(this.darkThreshold); + this.Controls.Add(this.pixelSize); + this.Controls.Add(this.dest); + this.Controls.Add(this.button1); + this.Controls.Add(this.src); + this.Name = "Form1"; + this.Text = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.src)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dest)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.PictureBox src; + private System.Windows.Forms.PictureBox dest; + private System.Windows.Forms.TextBox pixelSize; + private System.Windows.Forms.TextBox darkThreshold; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.TextBox targetWidth; + private System.Windows.Forms.TextBox targetHeight; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + } +} + diff --git a/DeRez/Form1.cs b/DeRez/Form1.cs new file mode 100644 index 0000000..4c98ddc --- /dev/null +++ b/DeRez/Form1.cs @@ -0,0 +1,263 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace DeRez { + public partial class Form1 : Form { + private Image _image; + private int _pixelSize = 4; + private float _threshold = .2f; + private int _targetWidth = 64; + private int _targetHeight = 128; + private Rectangle _cropArea; + + Boolean bHaveMouse = false; + Point ptOriginal = new Point(); + Point ptLast = new Point(); + + public Form1() { + _cropArea = new Rectangle(0, 0, _targetWidth, _targetHeight); + InitializeComponent(); + src.Resize += (sender, args) => dest.Location = new Point(src.Location.X + src.Width + 5, dest.Location.Y); + src.Paint += SrcPicBox_Paint; + src.MouseDown += SrcPicBox_MouseDown; + src.MouseMove += SrcPicBox_MouseMove; + src.MouseUp += SrcPicBox_MouseUp; + + pixelSize.Text = _pixelSize.ToString(); + darkThreshold.Text = _threshold.ToString(); + targetHeight.Text = _targetHeight.ToString(); + targetWidth.Text = _targetWidth.ToString(); + } + + private void SrcPicBox_MouseDown(object sender, MouseEventArgs e) { + // Make a note that we "have the mouse". + bHaveMouse = true; + + // Store the "starting point" for this rubber-band rectangle. + ptOriginal.X = e.X; + ptOriginal.Y = e.Y; + + // Special value lets us know that no previous + // rectangle needs to be erased. + + ptLast.X = -1; + ptLast.Y = -1; + + _cropArea = new Rectangle(new Point(e.X, e.Y), new Size()); + } + + private void SrcPicBox_MouseUp(object sender, MouseEventArgs e) { + // Set internal flag to know we no longer "have the mouse". + bHaveMouse = false; + + // If we have drawn previously, draw again in that spot + // to remove the lines. + if ( ptLast.X != -1 ) { + Point ptCurrent = new Point(e.X, e.Y); + } + + // Set flags to know that there is no "previous" line to reverse. + ptLast.X = -1; + ptLast.Y = -1; + ptOriginal.X = -1; + ptOriginal.Y = -1; + + DeRez(); + } + + private void SrcPicBox_MouseMove(object sender, MouseEventArgs e) { + Point ptCurrent = new Point(e.X, e.Y); + + // If we "have the mouse", then we draw our lines. + if ( bHaveMouse ) { + // If we have drawn previously, draw again in + // that spot to remove the lines. + + // Update last point. + ptLast = ptCurrent; + + // Draw new lines. + + // e.X - _cropArea.X; + // normal + if ( e.X > ptOriginal.X && e.Y > ptOriginal.Y ) { + _cropArea.Width = e.X - ptOriginal.X; + + // e.Y - _cropArea.Height; + _cropArea.Height = e.Y - ptOriginal.Y; + } else if ( e.X < ptOriginal.X && e.Y > ptOriginal.Y ) { + _cropArea.Width = ptOriginal.X - e.X; + _cropArea.Height = e.Y - ptOriginal.Y; + _cropArea.X = e.X; + _cropArea.Y = ptOriginal.Y; + } else if ( e.X > ptOriginal.X && e.Y < ptOriginal.Y ) { + _cropArea.Width = e.X - ptOriginal.X; + _cropArea.Height = ptOriginal.Y - e.Y; + + _cropArea.X = ptOriginal.X; + _cropArea.Y = e.Y; + } else { + _cropArea.Width = ptOriginal.X - e.X; + + // e.Y - _cropArea.Height; + _cropArea.Height = ptOriginal.Y - e.Y; + _cropArea.X = e.X; + _cropArea.Y = e.Y; + } + + // adjust the width and height of the crop area to match the target + float ratio = (float) _targetHeight / _targetWidth; + float cropRatio = (float) _cropArea.Height / _cropArea.Width; + if ( Math.Abs(ratio - cropRatio) > .1 ) { + _cropArea.Height = (int) (_cropArea.Width * ratio); + } + + src.Refresh(); + } + } + + private Bitmap CropSource() { + + //Prepare a new Bitmap on which the cropped image will be drawn + Bitmap sourceBitmap = new Bitmap(src.Image, src.Width, src.Height); + Bitmap b; + try { + b = new Bitmap(_cropArea.Width, _cropArea.Height); + } catch ( ArgumentException ) { + return sourceBitmap; + } + + using ( Graphics g = Graphics.FromImage(b) ) { + + //Draw the image on the Graphics object with the new dimesions + g.DrawImage(sourceBitmap, new Rectangle(0, 0, b.Width, b.Height), + _cropArea, GraphicsUnit.Pixel); + + //Good practice to dispose the System.Drawing objects when not in use. + sourceBitmap.Dispose(); + + return b; + } + } + + private void SrcPicBox_Paint(object sender, PaintEventArgs e) { + if ( _cropArea != null ) { + Pen drawLine = new Pen(Color.Black); + drawLine.DashStyle = DashStyle.Dash; + e.Graphics.DrawRectangle(drawLine, _cropArea); + } + } + + private void button2_Click(object sender, EventArgs e) { + this.openFileDialog1.ShowDialog(); + string path = openFileDialog1.FileName; + _image = Image.FromFile(path); + src.Image = _image; + //_cropArea = new Rectangle(0, 0, _image.Width, _image.Height); + DeRez(); + } + + private void button1_Click(object sender, EventArgs e) { + DeRez(); + } + + private void DeRez() { + if ( _image != null ) { + Bitmap bitmap = CropSource(); + int outputWidth = bitmap.Width / _pixelSize; + int outputHeight = bitmap.Height / _pixelSize; + Bitmap output = new Bitmap(outputWidth, outputHeight); + for ( int y = 0; y < outputHeight; y++ ) { + for ( int x = 0; x < outputWidth; x++ ) { + int black = 0; + for ( int yy = 0; y * _pixelSize + yy < bitmap.Height && yy < _pixelSize; yy++ ) { + for ( int xx = 0; x * _pixelSize + xx < bitmap.Width && xx < _pixelSize; xx++ ) { + Color pixel = bitmap.GetPixel(x * _pixelSize + xx, y * _pixelSize + yy); + if ( IsPixelDark(pixel) ) { + black++; + } + } + } + if ( black > (_pixelSize * _pixelSize) / 2 ) { + output.SetPixel(x, y, Color.Black); + } else { + output.SetPixel(x, y, Color.White); + } + } + } + + output = ResizeImage(output, _targetWidth, _targetHeight); + dest.Image = output; + } + } + + private bool IsPixelDark(Color pixel) { + return pixel.GetBrightness() < _threshold; + } + + private void pixelSize_TextChanged(object sender, EventArgs e) { + int parse; + if ( Int32.TryParse(pixelSize.Text, out parse) ) { + _pixelSize = parse; + DeRez(); + } + } + + private void darkThreshold_TextChanged(object sender, EventArgs e) { + float parse; + if ( float.TryParse(darkThreshold.Text, out parse) ) { + _threshold = parse; + DeRez(); + } + } + + /// + /// Resize the image to the specified width and height. + /// + /// The image to resize. + /// The width to resize to. + /// The height to resize to. + /// The resized image. + public static Bitmap ResizeImage(System.Drawing.Image image, int width, int height) { + //a holder for the result + Bitmap result = new Bitmap(width, height); + + //use a graphics object to draw the resized image into the bitmap + using ( Graphics graphics = Graphics.FromImage(result) ) { + //set the resize quality modes to high quality + graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed; + graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; + //draw the image into the target bitmap + graphics.DrawImage(image, 0, 0, result.Width, result.Height); + } + + //return the resulting bitmap + return result; + } + + private void targetWidth_TextChanged(object sender, EventArgs e) { + int parse; + if (Int32.TryParse(targetWidth.Text, out parse)) { + _targetWidth = parse; + DeRez(); + } + } + + private void targetHeight_TextChanged(object sender, EventArgs e) { + int parse; + if ( Int32.TryParse(targetHeight.Text, out parse) ) { + _targetHeight = parse; + DeRez(); + } + } + + } +} diff --git a/DeRez/Form1.resx b/DeRez/Form1.resx new file mode 100644 index 0000000..a79af58 --- /dev/null +++ b/DeRez/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 186, 17 + + \ No newline at end of file diff --git a/DeRez/Program.cs b/DeRez/Program.cs new file mode 100644 index 0000000..1ea9a39 --- /dev/null +++ b/DeRez/Program.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace DeRez { + static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/DeRez/Properties/AssemblyInfo.cs b/DeRez/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..01bbcd2 --- /dev/null +++ b/DeRez/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DeRez")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DeRez")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a765354c-1f42-4824-9b89-caa09c862ef5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DeRez/Properties/Resources.Designer.cs b/DeRez/Properties/Resources.Designer.cs new file mode 100644 index 0000000..597240e --- /dev/null +++ b/DeRez/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.269 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DeRez.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ( (resourceMan == null) ) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DeRez.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/DeRez/Properties/Resources.resx b/DeRez/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/DeRez/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DeRez/Properties/Settings.Designer.cs b/DeRez/Properties/Settings.Designer.cs new file mode 100644 index 0000000..7b1672a --- /dev/null +++ b/DeRez/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.269 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DeRez.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings) (global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/DeRez/Properties/Settings.settings b/DeRez/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/DeRez/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + +