From c3e1f5a91731af656497a343a3b447a48c853407 Mon Sep 17 00:00:00 2001 From: Russ Kollmansberger Date: Thu, 10 Jul 2025 08:05:27 -0500 Subject: [PATCH] Add project files. --- App.config | 6 ++ CopyAndEncodeImage.csproj | 83 +++++++++++++++++++++ CopyAndEncodeImage.sln | 25 +++++++ Form1.Designer.cs | 99 +++++++++++++++++++++++++ Form1.cs | 48 +++++++++++++ Form1.resx | 120 +++++++++++++++++++++++++++++++ Program.cs | 36 ++++++++++ Properties/AssemblyInfo.cs | 33 +++++++++ Properties/Resources.Designer.cs | 62 ++++++++++++++++ Properties/Resources.resx | 117 ++++++++++++++++++++++++++++++ Properties/Settings.Designer.cs | 26 +++++++ Properties/Settings.settings | 7 ++ 12 files changed, 662 insertions(+) create mode 100644 App.config create mode 100644 CopyAndEncodeImage.csproj create mode 100644 CopyAndEncodeImage.sln create mode 100644 Form1.Designer.cs create mode 100644 Form1.cs create mode 100644 Form1.resx create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings diff --git a/App.config b/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CopyAndEncodeImage.csproj b/CopyAndEncodeImage.csproj new file mode 100644 index 0000000..bd585f3 --- /dev/null +++ b/CopyAndEncodeImage.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {FBD2CBB6-361F-497D-B586-DC0AFC59CF86} + WinExe + CopyAndEncodeImage + CopyAndEncodeImage + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + 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/CopyAndEncodeImage.sln b/CopyAndEncodeImage.sln new file mode 100644 index 0000000..0029b9e --- /dev/null +++ b/CopyAndEncodeImage.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36109.1 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CopyAndEncodeImage", "CopyAndEncodeImage.csproj", "{FBD2CBB6-361F-497D-B586-DC0AFC59CF86}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FBD2CBB6-361F-497D-B586-DC0AFC59CF86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBD2CBB6-361F-497D-B586-DC0AFC59CF86}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBD2CBB6-361F-497D-B586-DC0AFC59CF86}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBD2CBB6-361F-497D-B586-DC0AFC59CF86}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F703FFEF-14F9-4071-8DE4-E2FA23AF682C} + EndGlobalSection +EndGlobal diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..2571893 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,99 @@ +namespace CopyAndEncodeImage { + 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.btnChoose = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.btnEncode = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnChoose + // + this.btnChoose.Location = new System.Drawing.Point(381, 10); + this.btnChoose.Name = "btnChoose"; + this.btnChoose.Size = new System.Drawing.Size(64, 21); + this.btnChoose.TabIndex = 0; + this.btnChoose.Text = "Choose"; + this.btnChoose.UseVisualStyleBackColor = true; + this.btnChoose.Click += new System.EventHandler(this.btnChoose_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(20, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(60, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Image File:"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(84, 10); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(291, 21); + this.textBox1.TabIndex = 2; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // btnEncode + // + this.btnEncode.Enabled = false; + this.btnEncode.Location = new System.Drawing.Point(108, 59); + this.btnEncode.Name = "btnEncode"; + this.btnEncode.Size = new System.Drawing.Size(256, 66); + this.btnEncode.TabIndex = 3; + this.btnEncode.Text = "Encode Base64 && Copy to Clipboard"; + this.btnEncode.UseVisualStyleBackColor = true; + this.btnEncode.Click += new System.EventHandler(this.btnEncode_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(473, 160); + this.Controls.Add(this.btnEncode); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnChoose); + this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Encode Image to Base64"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnChoose; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button btnEncode; + } +} + diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..98ecb88 --- /dev/null +++ b/Form1.cs @@ -0,0 +1,48 @@ +using System; +using System.IO; +using System.Windows.Forms; + +namespace CopyAndEncodeImage { + public partial class Form1 : Form { + public Form1() { + InitializeComponent(); + } + + private void btnEncode_Click(object sender, EventArgs e) { + if (!File.Exists(textBox1.Text)) { + MessageBox.Show("The specified file does not exist.", "File Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (Path.GetExtension(textBox1.Text).ToLower() != ".png") { + MessageBox.Show("Please select a valid PNG file.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + try { + byte[] bytes = File.ReadAllBytes(textBox1.Text); + string base64String = Convert.ToBase64String(bytes); + string output = $"data:image/png;base64,{base64String}"; + Clipboard.SetText(output); + MessageBox.Show("Image encoded and copied to clipboard successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } catch (Exception ex) { + MessageBox.Show($"An error occurred while encoding the image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnChoose_Click(object sender, EventArgs e) { + OpenFileDialog openFileDialog = new OpenFileDialog { + Filter = "PNG Files|*.png", + Title = "Select a PNG Image", + FileName = string.IsNullOrEmpty(textBox1.Text) ? "" : textBox1.Text + }; + if (openFileDialog.ShowDialog() == DialogResult.OK) { + textBox1.Text = openFileDialog.FileName; + } + } + + private void textBox1_TextChanged(object sender, EventArgs e) { + btnEncode.Enabled = !string.IsNullOrEmpty(textBox1.Text) && System.IO.Path.GetExtension(textBox1.Text).ToLower() == ".png"; + } + } +} diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..0e30d25 --- /dev/null +++ b/Program.cs @@ -0,0 +1,36 @@ +using System; +using System.IO; +using System.Linq; +using System.Windows.Forms; + +namespace CopyAndEncodeImage { + internal static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(params string[] args) { + if (args.Count() > 0) { + // If there are command line arguments, pass them to the form + + if (Path.GetExtension(args[0].ToLower()) != ".png") { + MessageBox.Show("Please provide a valid PNG file as the first argument.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var bytes = File.ReadAllBytes(args[0]); + string base64String = Convert.ToBase64String(bytes); + //string base64String = new string(base64Chars); + + string output = $"data:image/png;base64,{base64String}"; + Clipboard.SetText(output); + } else { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + + + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d6dde16 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +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("CopyAndEncodeImage")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CopyAndEncodeImage")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[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("fbd2cbb6-361f-497d-b586-dc0afc59cf86")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3b06e65 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CopyAndEncodeImage.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("CopyAndEncodeImage.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/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/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/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..cd45e86 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CopyAndEncodeImage.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.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/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + +