WPF 二维码生成器

因为使用到ZXing.Net库,所以需要下载添加引用到项目去。

ZXing是一个开源Java类库用于解析多种格式的1D、2D条形码,能够对QR编码、Data Matrix、UPC的1D条形码进行解码它提供了多种平台的客户端:J2SE、J2ME、Android、Net。

  1. ZXing.Net开源代码地址:https://github.com/micjahn/ZXing.Net
  2. 通过NuGet将Zxing.Net添加到你的项目下,如下图。

安装完成后项目会多了以下几个引用

 

Xaml代码:

首先xaml代码添加Image控件显示生成的二维码,以及Button控件显示下载和生成二维码按钮。

后台(C#):

首先引入需要用到的命名空间。

生成二维码事件,将Image控件数据源设置空,调用二维码生成方法,设置Button的可见性。

编写生成二维码方法,

 

 

 

 

因为生成的是Bitmap,在WPF需要转换为BitmapImage(xaml上载图像的专用BitmapSource)

将生成的二维码保存到本地。

全部代码:

namespace WpfApp3
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    //生成二维码按钮
        private void Button_Click(object sender, RoutedEventArgs e)
        {   imageQRCode.Source = null;
            try
            {
                GeneratorQRCode(txtbox_input.Text);
                btn_dow.Visibility = Visibility.Visible;
            }
            catch (Exception ex)
            {
                txtbox_input.Text = ex.Message;//异常
            }
        }
        // 二维码生成函数    
        private Image GeneratorQRCode(string txt)
        {
            //BarcodeWriter一个智能类来编码一些内容的二维码、条形码图像 
            BarcodeWriter writer = new BarcodeWriter
            {
                Format = BarcodeFormat.QR_CODE//设置二维码的格式
            };
            writer.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); // 编码格式    
            writer.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
            int codeSizeInPixels = 260;      // 二维码长宽       
            writer.Options.Height = codeSizeInPixels;
            writer.Options.Width = codeSizeInPixels;
            writer.Options.Margin = 0;       // 设置边框         
            BitMatrix bm = writer.Encode(txt);
            Bitmap img = writer.Write(bm);//对指定内容进行编码,并返回该码的呈现实例(渲染属性、实例使用,在方法之前调用)
            imageQRCode.Source = BitmapToBitmapImage(img);//将图片控件的数据源设为生成后的二维码
            return img;
        }
        // Bitmap --> BitmapImage       

        public static BitmapImage BitmapToBitmapImage(Bitmap bitmap)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                bitmap.Save(stream, ImageFormat.Png);
                stream.Position = 0; BitmapImage result = new BitmapImage();
                result.BeginInit(); result.CacheOption = BitmapCacheOption.OnLoad; result.StreamSource = stream; result.EndInit();
                result.Freeze();
                return result;
            }
        }
        /// <summary>
        /// 保存二维码图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Image Files ( *.png, *.bmp, *.jpg)|*.bmp;*.png;*.jpg | All Files | *.*";//图片格式
            sfd.RestoreDirectory = true;//保存对话框是否记忆上次打开的目录 
            if (sfd.ShowDialog() == true)
            {
                var encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create((BitmapSource)this.imageQRCode.Source));
                using (FileStream stream = new FileStream(sfd.FileName, FileMode.Create))
                    encoder.Save(stream);
            }
        }

      

    }
}

 

效果:

根据内容生成二维码

点击下载将二维码保存到本地

猜你喜欢

转载自blog.csdn.net/weixin_43100896/article/details/86666813