在网上找了找扫描二维码的例子,利用ZXing库实现(下载),提供的Silverlight版本的下载,在网上搜了一下已经有wp的dll可用了,不过网上实现的条码扫描的例子还都是用的Silverlight版本的dll。有个例子感觉写的不错能学到东西,就模仿着写了写。

 public static class BarCodeManager{internal static Action<string> BarCodeFound;internal static Action<Exception> Error;static BarCodeManager(){}/// <summary>/// 启动条码扫描/// </summary>/// <param name="barCodeFound">扫描成功执行的操作</param>/// <param name="error">扫描失败的操作</param>/// <param name="barcodeFormat">编码类型,默认为ean_13条形码</param>public static void StartScan(Action<string> barCodeFound, Action<Exception> error, BarcodeFormat barcodeFormat = null){var mainFrame = Application.Current.RootVisual as PhoneApplicationFrame;if (mainFrame != null){if (barcodeFormat == null){barcodeFormat = BarcodeFormat.EAN_13;}BarCodeFound = barCodeFound;Error = error;ZXingReader = GetReader(barcodeFormat);mainFrame.Navigate(new Uri("/ScanCode.xaml", UriKind.Relative));}}private static Reader zXingReader;public static Reader ZXingReader{get{if (zXingReader == null){return new EAN13Reader();}return zXingReader;}set { BarCodeManager.zXingReader = value; }}internal static Reader GetReader(BarcodeFormat format){Reader r;switch (format.Name){case "CODE_128":r = new Code128Reader();break;case "CODE_39":r = new Code39Reader();break;case "EAN_13":r = new EAN13Reader();break;case "EAN_8":r = new EAN8Reader();break;case "ITF":r = new ITFReader();break;case "UPC_A":r = new UPCAReader();break;case "UPC_E":r = new UPCEReader();break;case "QR_CODE":r = new QRCodeReader();break;default:r = null;break;}return r;}}

Action<>这个第一次接触到,要扫描条码信息就调用类的StartScan方法,跳转到ScanCode.xaml 启动扫描。通过第一个参数(Action<string> barCodeFound) 返回扫面的结果。
ScanCode.cs代码
public partial class ScanCode : PhoneApplicationPage{PhotoCamera photocamera;VideoBrush videoBrush = new VideoBrush();byte[] buffer = null;//存储photocamera 获取的亮度数据Result result = null;public ScanCode(){InitializeComponent();}protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){if (photocamera == null){photocamera = new PhotoCamera();photocamera.Initialized += new EventHandler<CameraOperationCompletedEventArgs>(photocamera_Initialized);photocamera.AutoFocusCompleted += new EventHandler<CameraOperationCompletedEventArgs>(photocamera_AutoFocusCompleted);video.Fill = videoBrush;videoBrush.SetSource(photocamera);}base.OnNavigatedTo(e);}protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e){if (photocamera != null){//删除事件处理  msdn备注photocamera.Initialized -= photocamera_Initialized;photocamera.AutoFocusCompleted -= photocamera_AutoFocusCompleted;photocamera.CancelFocus();photocamera.Dispose();}base.OnNavigatingFrom(e);}//对焦操作完成发生void photocamera_AutoFocusCompleted(object sender, CameraOperationCompletedEventArgs e){result = null;try{while (result == null){var binaryBitmap = GetBitmapFromCamera();if (binaryBitmap != null){try{result = BarCodeManager.ZXingReader.decode(binaryBitmap);}catch{}}}if (result != null){BarCodeManager.BarCodeFound(result.Text);}else{            //再次执行相机聚焦操作,也可以用DispatcherTimer周期执行GetBitmapFromCamera获取解码数据photocamera.Focus();}}catch (Exception ex){//BarCodeManager.Error(ex);
            }}void photocamera_Initialized(object sender, CameraOperationCompletedEventArgs e){photocamera.FlashMode = FlashMode.Auto;photocamera.Focus();}/// <summary>/// 获取摄像头扫描的图像/// </summary>/// <returns></returns>
        BinaryBitmap GetBitmapFromCamera(){BinaryBitmap binaeryBitmap = null;try{var pixelWidth = (int)photocamera.PreviewResolution.Width;var pixelHeight = (int)photocamera.PreviewResolution.Height;if (buffer == null || buffer.Length != (pixelHeight * pixelWidth)){buffer = new byte[pixelWidth * pixelHeight];}//捕捉亮度数据,创建HybridBinarizer和BinaryBitmap类,返回BinaryBitmap给Reade对象解码
                photocamera.GetPreviewBufferY(buffer);var luminance = new RGBLuminanceSource(buffer, pixelWidth, pixelHeight, true);var binarizer = new HybridBinarizer(luminance);binaeryBitmap = new BinaryBitmap(binarizer);}catch{}return binaeryBitmap;}}

调用代码,调用StartScan,完成条码扫描,所有的操作完全可以写在一个ScanCode类中,这种设计是可以在封装成一个dll,在外部直接调用

BarCodeManager.StartScan((r) => Dispatcher.BeginInvoke(() =>{tbScanResultBarCode.Text = r;NavigationService.GoBack();}),null);

OK!纯属来帖代码来了,,,,,,

转载于:https://www.cnblogs.com/my-tzc/p/3266122.html

windows phone 扫描二维码相关推荐

  1. Java使用opencv调用微信扫描二维码引擎,附带windows和linux需要的动态库文件

    前言 最近公司项目有一个需求,要用二维码传递数据.于是使用了zxing生成和解析二维码,但是zxing扫描二维码原图还可以,一旦扫描用户使用手机拍摄的二维码,识别率急剧下降.尝试了对拍摄的照片进行降噪 ...

  2. SNF开发平台WinForm-平板拍照及扫描二维码功能

    在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...

  3. React Native + react-native-camera 实现扫描二维码「安卓」

    注:本篇博客参考了此篇:React Native实现扫描二维码功能基于react-native-camera 感谢 孙先森i 的分享:也感谢引用的其他博客的作者:我也来加块砖: 这篇博客用于自我记录和 ...

  4. Win10/UWP 扫描二维码

    在Win10开发中,扫描二维码以及拍照都和以前的Windows 8.1 相同,是使用MediaCapture对象来获取图片或者视频预览数据,通过MediaCapture的CapturePhotoToS ...

  5. 用户登入腾讯视频,QQ扫描二维码不显示二维码

    环境: 电脑:联想E14 系统:Windows 10 专业版 64位 AC:深信服AC13.0.47 问题描述: 用户登入腾讯视频,QQ扫描二维码不显示二维码 解决方案: 1.在AC上,在线用户列表搜 ...

  6. 几行命令实现日常任务的自动化执行,包括解析html、扫描二维码、语音转换、pdf编辑、程序员问题搜索、自动化手机、监控cpu、上传机器人、视频水印等

    几行命令实现日常任务的自动化执行,包括解析html.扫描二维码.语音转换.pdf编辑.程序员问题搜索.自动化手机.监控cpu.上传机器人.视频水印等. 01.解析和提取 HTML 02.二维码扫描仪 ...

  7. MC2000 扫描枪 扫描二维码 源码

    最近开发了一个扫描枪程序. 很简单的一个二维码扫描程序. 源码下载地址:MC2000扫描枪源码 MC2000 扫描枪 扫描二维码 源码 用VS2008开发,不要用其它的VS,高版本的不行. 1. 开发 ...

  8. 实现手机扫描二维码页面登录,类似web微信-第一篇,业务分析

    关于XMPP组件的文章,先休息两天,好歹已经完整的写了一份. 这两天,先实现一套关于web微信扫描二维码页面登录的试验,因为这种模式在我们的很多业务场景里大有前途. 首先介绍一下web微信登录的过程 ...

  9. 扫描二维码在移动设备上浏览响应式页面

      最近想尝试对一个Ghost博客主题进行移植,因为对一个后端程序员来说,进行前端方面的工作实在是个不小的挑战,而我对CSS更是有种与生俱来的恐惧感,所以我是非常喜欢Bootstrap和Materil ...

  10. 关于Unity调用摄像头扫描二维码与生成二维码的实现方法

    1.常用的生成二维码网址 https://cli.im/ 2.上官网下载二维码插件 http://zxingnet.codeplex.com/ 3.将下载的插件中zxing.unity.dll文件放入 ...

最新文章

  1. Jupyter Notebook 快速入门简易教程
  2. 【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized
  3. 他不怕被拒绝_不怕被拒绝,这几大星座男追人时最有耐心
  4. 死锁编码及定位分析(故障排查)
  5. iOS 14 大改还有神秘硬件登场,苹果 WWDC20 今夜线上发布
  6. POJ3982 序列【大数】
  7. shell--字符串是否为空
  8. python2中的print语句可以不用小括号。_Python基础语法 | 代码规范amp;判断语句amp;循环语句...
  9. Google Office 战略 途经:收购JotSpot
  10. POJ - 3537 Crosses and Crosses (MLI - SG)
  11. DDD结合整洁架构落地实践
  12. WIN7 声音图标不见
  13. keil+mdk+c语言,keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法
  14. 【ArchSummit】Web3.0去中心化预言机网络技术剖析
  15. recovery 升级界面顶部花屏问题分析
  16. FTDI FT2232H USB TO JTAG学习笔记(一)基础概念
  17. 正则表达式re模式(python爬虫糗事百科热点段子)
  18. 无人驾驶车辆路径跟踪的增量式PID控制
  19. 做个寡言,但心有一片海的人
  20. chrome桌面提醒功能使用

热门文章

  1. oracle spool
  2. SIP Trunk / SIP 中继服务
  3. 配置MAC地址表实现绑定和过滤
  4. HTC Desire试玩手记之四(GPS连不上)
  5. Android Cloud to Device Messaging 服务介绍 – 如何使用云计算推送消息到手机(转载)...
  6. 跨域认证--使用Passport
  7. json/pickle模块(序列化)
  8. Telnet基本概念及C# Telnet 客户端程序
  9. 从博客专栏想到的数据分析
  10. 我的Python之路:浏览器模拟