QR Code can copy to clipboard and save as png/svg

This commit is contained in:
mcored 2014-06-01 10:05:59 +08:00
parent ad1f00a51e
commit 5201b39bfa
3 changed files with 107 additions and 2 deletions

View file

@ -28,8 +28,13 @@ protected override void Dispose(bool disposing)
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.qrMain = new Gma.QrCodeNet.Encoding.Windows.Forms.QrCodeGraphicControl();
this.txtQRCode = new System.Windows.Forms.TextBox();
this.cmsQR = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiSaveAs = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiCopy = new System.Windows.Forms.ToolStripMenuItem();
this.cmsQR.SuspendLayout();
this.SuspendLayout();
//
// qrMain
@ -37,6 +42,7 @@ private void InitializeComponent()
this.qrMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.qrMain.ContextMenuStrip = this.cmsQR;
this.qrMain.ErrorCorrectLevel = Gma.QrCodeNet.Encoding.ErrorCorrectionLevel.M;
this.qrMain.Location = new System.Drawing.Point(2, 26);
this.qrMain.Name = "qrMain";
@ -56,6 +62,30 @@ private void InitializeComponent()
this.txtQRCode.Visible = false;
this.txtQRCode.TextChanged += new System.EventHandler(this.txtQRCode_TextChanged);
//
// cmsQR
//
this.cmsQR.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsmiCopy,
this.tsmiSaveAs});
this.cmsQR.Name = "cmsQR";
this.cmsQR.Size = new System.Drawing.Size(212, 48);
this.cmsQR.Text = "QR";
//
// tsmiSaveAs
//
this.tsmiSaveAs.Name = "tsmiSaveAs";
this.tsmiSaveAs.Size = new System.Drawing.Size(211, 22);
this.tsmiSaveAs.Text = "Save image as PNG...";
this.tsmiSaveAs.Click += new System.EventHandler(this.tsmiSaveAs_Click);
//
// tsmiCopy
//
this.tsmiCopy.Name = "tsmiCopy";
this.tsmiCopy.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C)));
this.tsmiCopy.Size = new System.Drawing.Size(211, 22);
this.tsmiCopy.Text = "Copy to clipboard";
this.tsmiCopy.Click += new System.EventHandler(this.tsmiCopy_Click);
//
// QRCodeForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -70,6 +100,7 @@ private void InitializeComponent()
this.Text = "ShareX - QR code";
this.TopMost = true;
this.Resize += new System.EventHandler(this.QRCodeForm_Resize);
this.cmsQR.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -79,5 +110,8 @@ private void InitializeComponent()
private Gma.QrCodeNet.Encoding.Windows.Forms.QrCodeGraphicControl qrMain;
private System.Windows.Forms.TextBox txtQRCode;
private System.Windows.Forms.ContextMenuStrip cmsQR;
private System.Windows.Forms.ToolStripMenuItem tsmiCopy;
private System.Windows.Forms.ToolStripMenuItem tsmiSaveAs;
}
}

View file

@ -23,8 +23,12 @@ You should have received a copy of the GNU General Public License
#endregion License Information (GPL v3)
using Gma.QrCodeNet.Encoding;
using Gma.QrCodeNet.Encoding.Windows.Render;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
namespace HelpersLib
@ -69,5 +73,69 @@ private void qrMain_Click(object sender, EventArgs e)
Close();
}
}
private void tsmiCopy_Click(object sender, EventArgs e)
{
GraphicsRenderer gRender = new GraphicsRenderer(new FixedModuleSize(30, QuietZoneModules.Four));
BitMatrix matrix = qrMain.GetQrMatrix();
using (MemoryStream stream = new MemoryStream())
{
gRender.WriteToStream(matrix, ImageFormat.Png, stream, new Point(600, 600));
ClipboardHelpers.CopyImage(Image.FromStream(stream));
}
}
private void tsmiSaveAs_Click(object sender, EventArgs e)
{
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.Filter = @"PNG (*.png)|*.png|Bitmap (*.bmp)|*.bmp|Encapsuled PostScript (*.eps)|*.eps|SVG (*.svg)|*.svg";
saveFileDialog.FileName = txtQRCode.Text;
saveFileDialog.DefaultExt = "png";
if (saveFileDialog.ShowDialog() != DialogResult.OK)
{
return;
}
if (saveFileDialog.FileName.EndsWith("eps"))
{
BitMatrix matrix = qrMain.GetQrMatrix();
// Initialize the EPS renderer
var renderer = new EncapsulatedPostScriptRenderer(
new FixedModuleSize(6, QuietZoneModules.Two), // Modules size is 6/72th inch (72 points = 1 inch)
new FormColor(Color.Black), new FormColor(Color.White));
using (var file = File.Open(saveFileDialog.FileName, FileMode.CreateNew))
{
renderer.WriteToStream(matrix, file);
}
}
else if (saveFileDialog.FileName.EndsWith("svg"))
{
BitMatrix matrix = qrMain.GetQrMatrix();
// Initialize the EPS renderer
var renderer = new SVGRenderer(
new FixedModuleSize(6, QuietZoneModules.Two), // Modules size is 6/72th inch (72 points = 1 inch)
new FormColor(Color.FromArgb(150, 200, 200, 210)), new FormColor(Color.FromArgb(200, 255, 155, 0)));
using (var file = File.OpenWrite(saveFileDialog.FileName))
{
renderer.WriteToStream(matrix, file, false);
}
}
else
{
GraphicsRenderer gRender = new GraphicsRenderer(new FixedModuleSize(30, QuietZoneModules.Four));
BitMatrix matrix = qrMain.GetQrMatrix();
using (FileStream stream = new FileStream(saveFileDialog.FileName, FileMode.Create))
{
gRender.WriteToStream(matrix, ImageFormat.Png, stream, new Point(600, 600));
}
}
}
}
}
}

View file

@ -112,9 +112,12 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmsQR.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>