diff --git a/tools/QrCodeGenerator.cs b/tools/QrCodeGenerator.cs new file mode 100644 index 0000000..2c7616a --- /dev/null +++ b/tools/QrCodeGenerator.cs @@ -0,0 +1,134 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using ZXing; +using ZXing.Common; +using ZXing.QrCode; + +namespace AppStore +{ + public class QrCodeGeneratorForm : Form + { + private TextBox? inputTextBox; + private PictureBox? qrCodePictureBox; + private Button? generateButton; + private Button? saveButton; + + public QrCodeGeneratorForm() + { + InitializeComponent(); + this.Text = "二维码生成器"; + this.Size = new Size(500, 600); + this.StartPosition = FormStartPosition.CenterScreen; + } + + private void InitializeComponent() + { + // 输入文本框 + inputTextBox = new TextBox(); + inputTextBox.Multiline = true; + inputTextBox.ScrollBars = ScrollBars.Vertical; + inputTextBox.Size = new Size(400, 100); + inputTextBox.Location = new Point(50, 30); + inputTextBox.PlaceholderText = "请输入要生成二维码的文本内容..."; + this.Controls.Add(inputTextBox); + + // 生成按钮 + generateButton = new Button(); + generateButton.Text = "生成二维码"; + generateButton.Size = new Size(150, 40); + generateButton.Location = new Point(50, 150); + generateButton.Click += GenerateButton_Click; + this.Controls.Add(generateButton); + + // 二维码显示区域 + qrCodePictureBox = new PictureBox(); + qrCodePictureBox.Size = new Size(300, 300); + qrCodePictureBox.Location = new Point(100, 220); + qrCodePictureBox.SizeMode = PictureBoxSizeMode.StretchImage; + qrCodePictureBox.BorderStyle = BorderStyle.FixedSingle; + this.Controls.Add(qrCodePictureBox); + + // 保存按钮 + saveButton = new Button(); + saveButton.Text = "保存二维码"; + saveButton.Size = new Size(150, 40); + saveButton.Location = new Point(300, 150); + saveButton.Click += SaveButton_Click; + this.Controls.Add(saveButton); + } + + private void GenerateButton_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(inputTextBox?.Text)) + { + MessageBox.Show("请输入要生成二维码的文本内容", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + var writer = new BarcodeWriterPixelData + { + Format = BarcodeFormat.QR_CODE, + Options = new QrCodeEncodingOptions + { + Width = 300, + Height = 300, + Margin = 1 + } + }; + + var pixelData = writer.Write(inputTextBox.Text); + var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb); + var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height), + System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); + try + { + System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length); + } + finally + { + bitmap.UnlockBits(bitmapData); + } + qrCodePictureBox!.Image = bitmap; + } + catch (Exception ex) + { + MessageBox.Show($"生成二维码失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void SaveButton_Click(object sender, EventArgs e) + { + if (qrCodePictureBox?.Image == null) + { + MessageBox.Show("请先生成二维码", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + using (var saveDialog = new SaveFileDialog()) + { + saveDialog.Filter = "PNG 图片|*.png|JPEG 图片|*.jpg|BMP 图片|*.bmp"; + saveDialog.Title = "保存二维码图片"; + if (saveDialog.ShowDialog() == DialogResult.OK) + { + try + { + qrCodePictureBox!.Image.Save(saveDialog.FileName); + MessageBox.Show("二维码保存成功", "成功", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"保存二维码失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + } +}