博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#_WPF中创建二维码、识别二维码
阅读量:5745 次
发布时间:2019-06-18

本文共 4424 字,大约阅读时间需要 14 分钟。

第三方库:

  WPFMediaKit.dll ()

  zing.dll

 

NuGet安装这两个第三方dll

 

 

 

项目截图预览:

 

 项目代码:

using System;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Windows.Threading;using WPFMediaKit.DirectShow.Controls;using ZXing;using ZXing.Common;using ZXing.QrCode.Internal;namespace QRcode{    ///     /// MainWindow.xaml 的交互逻辑    ///     public partial class MainWindow : Window    {        ///         /// ZXING 二维码扫描类        ///         BarcodeReader codeReader = new BarcodeReader();        ///         /// 定时器        ///         DispatcherTimer cameraTimer = new DispatcherTimer();        public MainWindow()        {            InitializeComponent();            // 配置的摄像头名称            var camera = "Lenovo EasyCamera";            if (MultimediaUtil.VideoInputNames.Contains(camera))            {                //控件制定摄像头                vce.VideoCaptureSource = camera;                cameraTimer.IsEnabled = false;                cameraTimer.Interval = new TimeSpan(200); //执行间隔0.2秒                cameraTimer.Tick += cameraTimer_Tick;            }        }        ///         /// 计时器方法        ///         ///         ///         private void cameraTimer_Tick(object sender, EventArgs e)        {            RenderTargetBitmap bmp = new RenderTargetBitmap((int)vce.ActualWidth, (int)vce.ActualHeight, 96, 96, PixelFormats.Default);            vce.Measure(vce.RenderSize);            vce.Arrange(new Rect(vce.RenderSize));            bmp.Render(vce);            BitmapEncoder encoder = new JpegBitmapEncoder();            encoder.Frames.Add(BitmapFrame.Create(bmp));            using (MemoryStream ms = new MemoryStream())            {                encoder.Save(ms);                Bitmap btiMap = new Bitmap(ms);                var result = codeReader.Decode(btiMap);//解析条码                if (result != null)                {                    // 1:停止识别                    cameraTimer.Stop();                    vce.Play();                     MessageBox.Show($"识别内容为:{result}");                }            }        }        private void BtnShiBie_Click(object sender, RoutedEventArgs e)        {            cameraTimer.Start();        }        private void BtnShnegCeng_Click(object sender, RoutedEventArgs e)        {           var codimg= Create("hello world!!");            imgQR.Source = ChangeBitmapToImageSource(codimg);        }        ///         /// 创建二维码        ///         /// 二维码中保存的信息        /// 
public static Bitmap Create(string msg) { MultiFormatWriter writer = new MultiFormatWriter(); Dictionary
hint = new Dictionary
(); //设置二维码为utf-8编码 hint.Add(EncodeHintType.CHARACTER_SET, "utf-8"); //设置纠错等级, 高 hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); BitMatrix bm = writer.encode(msg, BarcodeFormat.QR_CODE, 200, 120, hint); BarcodeWriter barcodeWriter = new BarcodeWriter(); Bitmap bitmap = barcodeWriter.Write(bm); string codePath = Directory.GetCurrentDirectory() + "/code.jpg"; if (File.Exists(codePath)) File.Delete(codePath); bitmap.Save(codePath); return bitmap; } ///
/// 从bitmap转换成ImageSource /// ///
///
public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap) { IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (!DeleteObject(hBitmap)) { throw new System.ComponentModel.Win32Exception(); } return wpfBitmap; } [DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); }}

  

 项目源代码地址:

 

转载于:https://www.cnblogs.com/wendj/p/10789877.html

你可能感兴趣的文章
Windows Phone 7 隔离存储空间资源管理器
查看>>
Microsoft Excel 2000/2003修复工具
查看>>
apache安装报错undefined reference ssl
查看>>
关于爱情只有一句忠告
查看>>
CentOS 7下安装部署Oracle11g图文教程
查看>>
F#初学笔记06
查看>>
实战:将企业域名解析委派给企业DNS服务器
查看>>
在Lync 2013环境部署Office Web Apps
查看>>
微软大会Ignite,你准备好了么?
查看>>
读书笔记-高标管事 低调管人
查看>>
Master带给世界的思考:是“失控”还是进化
查看>>
用户和开发者不满苹果iCloud问题多多
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
我的工具:文本转音频文件
查看>>
【许晓笛】从零开始运行EOS系统
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
面试中会遇到的正则题
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>