WPF 操作二维码(二)

上一篇文章中讲述了使用C#生成二维码的操作,接下来进一步添加功能。

1. 将生成的二维码保存成本地图片

该操作的关键是如何读取Image控件中资源,并保存到本地。

1.1 创建一个BitmapSource的对象,表示具有特定大小和分辨率的单个不变的像素集。

1.2 创建一个BitmapEncoder的对象,将BitmapFram对象的集合编码为图像流。

1.3 使用BitmapFrame.Create方法,从给定的BitmapSource创建新的BitmapSource

1.4 FileStream类,公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。public FileStream(string path, FileMode mode)。

1.5 通过BitmapEncoder.Frames.Add()设置图像内的各帧。

1.6 通过BitmapEncoder.Save方法,将位图图像编码为指定的Stream

BitmapSource m = (BitmapSource)image1.Source;

BitmapEncoder encoder = null;

encoder = new PngBitmapEncoder();

FileStream stream = new FileStream("5555.png", FileMode.Create);

encoder.Frames.Add(BitmapFrame.Create(m));

encoder.Save(stream);

2. Image控件中显示选择的本地二维码图片

2.1 定义个OpenFileDialog的对象,表示一个通用对话框,用户可以使用此对话框来指定一个或多个要打开的文件的文件名。

2.2 通过OpenFileDialog.Title属性设置文件对话框的标题栏中显示的文本;

通过OpenFileDialog.Multiselect属性设置是否允许用户选择多个文件;

通过OpenFileDialog.Filter属性设置筛选器字符串;

通过OpenFileDialog.FileName属性设置一个字符串,其中包含在文件对话框中选定的文件的完整路径。

2.3 声明一个BitmapImage类的对象,提供一个经优化以使用XAML上载图像的专用BitmapSource。

2.4 最后将WPF上的Image控件的Source进行复制。

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

dlg.Title = "Please select image!";//设置标题

dlg.Multiselect = false;//禁止多选

dlg.InitialDirectory = InitialPath;//设定默认路径

dlg.Filter = "图片|*.jpg;*.png;*.gif;*.bmp;*.jpeg";

dlg.ShowDialog();

string szPath =dlg.FileName;

BitmapImage bitmapImage = new BitmapImage();

bitmapImage.BeginInit();

bitmapImage.CacheOption = BitmapCacheOption.OnLoad;

bitmapImage.UriSource = new Uri(szPath);

bitmapImage.EndInit();

bitmapImage.Freeze();

image1.Source = bitmapImage;

3. 识别Image控件中显示的二维码图片

关键点在于把WPF Image控件中的图像转换为bitmap

3.1 声明一个BarcodeReader对象,一个智能类来解码一个位图对象里面的条形码或二维码;

使用BarcodeReader.Decode(Bitmap )方法对一个位图对象的条形码或是二维码进行解密;

BarcodeReader.Decode(Bitmap )的返回值为Result类型,参数为Bitmap类型。

3.2 创建一个BitmapSource的对象m,获得Image控件中的Source,赋值为m;

创建一个Bitmap的对象bmp,调用public Bitmap(int width, int height, PixelFormat format)构造函数创建一个指定大小和格式化Bitmap类的新实例。

调用Bitmap.LockBits方法,将Bitmap锁定到系统内存中。

调用BitmapSource.CopyPixels方法,复制位图像素数据。

调用Bitmap.UnlockBits方法,从系统内存解锁此Biamap。

3.3 调用Result.ToString()方法,用于显示读取二维码中的字符串。

BarcodeReader reader =new BarcodeReader();

BitmapSource m = (BitmapSource)image1.Source;

System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(m.PixelWidth, m.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

System.Drawing.Imaging.BitmapData data = bmp.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

m.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);

bmp.UnlockBits(data);

Result result = reader.Decode(bmp);

MessageBox.Show(result.ToString());

***************************************************************************************************************

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 09:40:43

WPF 操作二维码(二)的相关文章

PHP生成二维码二种方法和实例

PHP生成二维码的两个方法和实例,分别使用Google API和PHP二维码生成类库PHP QR Code实现. 之前介绍过通过使用jQuery插件来生成二维码,今天分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jbxue.com"; generateQRfromGoogle($urlToEnc

iOS开发-定制多样式二维码

iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常见的二维码功能包括信息获取.网站跳转.电商交易.手机支付等等,其拥有密度小.信息容量大.容错能力强.成本低.制作难度低等优点.在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一. 在iOS7之后,苹果自身集成了二维码的生成和读取功能.生成二维码包括以下步骤 1.导入CoreIm

什么是二维码?

二维码,业界当然是人人听说,人人用过. 这个话题,我倒是百感交集,我一直认为,我有一种“二维码情节”. 一方面, 我自认为是国内“钻研”二维码比较早的一个人了,在后来的工作中,依旧会接触到二维码的利用,让我打开了更多的思路:另一方面,二维码的高度灵活,导致每个人.每个产品对它的理解都不一样.一直以来,国内公司更是在这方面不论是产品功能,还是互动营销上,都做得实在太粗糙.所以很难找到一个完美的方法,来把二维码真正的能力诠释出来. 这篇文章,我试着从原理.实践以及进阶技巧三个方面,来讲讲二维码可能对

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

ZXing解析二维码

上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImageLuminanceSource类,该类可在google的测试包中找到,另外j2se中也有该类,你可以将该类直接拷贝到源码中使用,你也可以自己写个. import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.

定制多样式二维码

转载自:http://sindrilin.com/ios-dev/2015/10/26/定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常见的二维码功能包括信息获取.网站跳转.电商交易.手机支付等等,其拥有密度小.信息容量大.容错能力强.成本低.制作难度低等优点.在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一. 在iOS7之后,苹果自

个性化自己的二维码

一.什么是二维码   二.我们如何制作二维码   三.如何制作自己的个性二维码 1.第一步.下载Php类库phpqrcode,(附下载地址:http://sourceforge.net/projects/phpqrcode/) 网上给出的使用案列是: <?php /* $errorCorrectionLevel 纠错级别:L.M.Q.H $matrixPointSize表示图片每个黑点的像素 点的大小:1到10 */ include '/phpqrcode/phpqrcode.php';//引入

ios-深度解析二维码的生成与使用

利用一个小demo来对二维码进行学习,总共四个界面(主界面,生成二维码界面,识别二维码界面,扫描二维码界面) 一.二维码的介绍 1.什么是二维码? 二维条码/二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的 总结: 用图形记录标记一些信息,方便通过图形识别来获取信息 2 应用场景 信息获取(名片.地图.WIFI密码.资料) 手机电商(用户扫码.手机直接购物下单) 手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付) 微信添加好友 二.二维码界

(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

(转)ZXing解析二维码

1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImageLuminanceSource类,该类可在google的测试包中找到,另外j2se中也有该类,你可以将该类直接拷贝到源码中使用,你也可以自己写个. 1.1 BufferedImageLuminanceSource类 package t1; import java.awt.Graphics2D; i