在WPF中开启摄像头扫描二维码(Media+Zxing)
近两天项目中需要添加一个功能,是根据摄像头来读取二维码信息,然后根据读出来的信息来和数据库中进行对比显示数据。
选择技术Zxing、WPFMediaKit。基本的原理就是让WPFmediaKit来对摄像头进行操作,然后Zxing这个库对图片进行分析大致就是这样。
在后台中定义了定时器,用于解析当前摄像头的图像,然后直接读数据。
需要注意的是一定要引入 using WPFMediaKit.DirectShow.Controls; using ZXing;
public partial class YIDong : Page
{
public YIDong()
{
InitializeComponent();
cb.ItemsSource = MultimediaUtil.VideoInputNames;//获得所有摄像头
if (MultimediaUtil.VideoInputNames.Length > )
{
cb.SelectedIndex = ;//第0个摄像头为默认摄像头
}
else
{
MessageBox.Show("电脑没有安装任何可用摄像头");
}
cameraTimer.IsEnabled = false;
cameraTimer.Interval = new TimeSpan(); //执行间隔0.2秒
cameraTimer.Tick += cameraTimer_Tick; ;
} /// <summary>
/// ZXING 二维码扫描类
/// </summary>
BarcodeReader codeReader = new BarcodeReader(); /// <summary>
/// 定时器
/// </summary>
DispatcherTimer cameraTimer = new DispatcherTimer(); private void cameraTimer_Tick(object sender, EventArgs e)
{
RenderTargetBitmap bmp = new RenderTargetBitmap((int)vce.ActualWidth, (int)vce.ActualHeight, , , 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)
{
string shelve_index = result.ToString();
ObservableCollection<XModel.STORe_DetailVm> list = XDAL.STORE_goods_Detail.GetGoodsByShelve_Index(shelve_index);
Dialog.OpenWindow open = Lib.pubMethod.GetOpenWindow(this);
if (open != null)
{
Application.Current.Properties["SweepList"] = list;
open.CloseAsTrue();
}
}
}
} private void btnCapture_Click(object sender, RoutedEventArgs e)
{
cameraTimer.Start();
} private void Restart_Click(object sender, RoutedEventArgs e)
{
cameraTimer.Stop();
vce.Play();
} private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//控件制定摄像头
vce.VideoCaptureSource = (string)cb.SelectedItem;
}
前台布局很简单,
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="86*"/>
<ColumnDefinition Width="237*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="5*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Background="LightBlue" Grid.Row="" Grid.ColumnSpan="">
<wpfmedia:VideoCaptureElement x:Name="vce" Stretch="Fill" Width="auto" Height="auto" Margin="" Grid.Row="" RenderTransformOrigin="0.5,0.5">
<wpfmedia:VideoCaptureElement.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<TranslateTransform/>
</TransformGroup>
</wpfmedia:VideoCaptureElement.RenderTransform>
</wpfmedia:VideoCaptureElement>
</StackPanel> <Label x:Name="label" Content="摄像头:" Grid.Row="" Grid.Column="" Width="" HorizontalAlignment="Right" Margin="0,14,0,4" />
<ComboBox x:Name="cb" Style="{StaticResource Query_Combo}" Grid.Row="" Width="" HorizontalAlignment="Left" Margin="2,13,0,8" SelectionChanged="cb_SelectionChanged" Grid.Column="" />
<Button Content="开始" x:Name="btnCapture" Style="{StaticResource Query_Button}" Click="btnCapture_Click" Width="" Grid.Row="" Grid.Column="" Height="" HorizontalAlignment="Left" Margin="9,10,0,14"/>
<Button Content="暂停" x:Name="btnReStart" Style="{StaticResource Query_Button}" Click="Restart_Click" Width="" Grid.Row="" Grid.Column="" Height="" HorizontalAlignment="Left" Margin="67,11,0,15"/> </Grid>
需要注意的是xaml一定要引入 xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" 。
效果如下。

在WPF中开启摄像头扫描二维码(Media+Zxing)的更多相关文章
- h5端呼起摄像头扫描二维码并解析
2016年6月29日补充: 最近做了一些与表单相关的项目,使用了h5的input控件,在使用过程中遇到了很多的坑.也包括与这篇文章相关的. 首先我们应该知道使用h5新提供的属性getUserMedia ...
- 使用vue做移动app时,调用摄像头扫描二维码
现在前端技术发展飞快,前端都能做app了,那么项目中,也会遇到调用安卓手机基层的一些功能,比如调用摄像头,完成扫描二维码功能 下面我就为大家讲解一下,我在项目中调用这功能的过程. 首先我们需要一个中间 ...
- 在iOS中使用ZBar扫描二维码
最近在做的项目中需要用到二维码扫描功能,之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Andro ...
- 在iOS中使用ZBar扫描二维码和条形码
最近做了个外包项目,里面用到了二维码扫描和微信支付!之前比较熟悉的是ZXing,但是在Xcode7.1里面发现竟然莫名的不支持,木有办法,从网上查了一下还有一种支持二维码扫描的东西,没错就是接下来我要 ...
- C# winfrom调用摄像头扫描二维码(完整版)
前段时间看到一篇博客,是这个功能的,参考了那篇博客写了这个功能玩一玩,没有做商业用途.发现他的代码给的有些描述不清晰的,我就自己整理一下发出来记录一下. 参考博客链接:https://www.cnbl ...
- Win10 UWP开发:摄像头扫描二维码/一维码功能
这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobi ...
- 打开手机摄像头扫描二维码或条形码全部操作(代码写的不好,请提出指教,共同进步,我只是一个Android的小白)
(1)下载二维码的库源码 链接:http://pan.baidu.com/s/1pKQyw2n 密码:r5bv 下载完成后打开可以看到 libzxing 的文件夹,最后添加进 Android Stu ...
- Vue-cli4 唤醒摄像头扫描二维码
<template> <div class="scan"> <div id="bcid"> <div id=" ...
- Ionic2学习笔记(10):扫描二维码
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5575843.html 时间:6/11/2016 说明: 在本文发表的时候(2016-06-1 ...
随机推荐
- springboot+swagger接口文档企业实践(下)
目录 1.引言 2. swagger接口过滤 2.1 按包过滤(package) 2.2 按类注解过滤 2.3 按方法注解过滤 2.4 按分组过滤 2.4.1 定义注解ApiVersion 2.4.2 ...
- drf目录
drf目录 1 web接口与restful规范 2 django中的restful规范 3 CBV请求分析 4 请求模块分析 5 响应模块分析 6 异常模块 7 解析模块 8 序列化类 9 视图组件 ...
- python matplotlib 画图表(点状图)
首先,选择自己希望画的图:在官方网站就可以直接点击图,然后就会出现源代码: http://matplotlib.org/gallery.html
- go变量
go基础 go变量(静态) package main import "fmt" func main() { //申明变量 var zx int //变量赋值 zx=10 //输出变 ...
- Tomcat连接器详解
1.连接器等同于nginx中的引擎. 2.tomcat连接器有三种运行模式bio.nio.apr . (1)bio(blocking I/O,阻塞式I/O操作) 1)表示tomcat使用的是传统的ja ...
- Python面试180道题
版权声明:本文为CSDN博主「CSDN学院官方账号」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/csd ...
- 关于TC297的Flash写入之前是否需要先擦除的问题
通过实际测试,对TC297 Flash的一个地址空间可以重复执行写入操作(program),而不需要先对该区域所在扇区进行擦除. MPC5675K则需要在写入之前进行擦除.
- ajax异步请求的三种常见方式
首先先介绍下ajax,ajax(ASynchronous JavaScript And XML)为异步的javascript和xml.所谓的异步和同步是指: 同步:客户端必须等待服务器的响应,在等待期 ...
- mac os 搭建私有DNS 之 dnsmasq
- MAC OS 创建私有DNS 仓库 - 使用场景 实际工作中有一些私有的域名需要修改host才可以访问 例如:localhost.dev develop-test.dev - 安装方法 brew ...
- 数据库MySQL的安装与卸载
安装 MySQL 卸载 MySQL: 停止 MySQL 服务 开始-->所有应用-->Windows 管理工具-->服务,将 MySQL 服务停止. 卸载 mysql server ...