zoukankan      html  css  js  c++  java
  • 在Windows IoT上生成和识别二维码

    在Windows IoT生成和识别二维码,实际上由于是UWP上实现,所以,理论上,这些生成和识别二维码的方法也可以在其它平台上运行。

    关于二维码的生成有很多库可以实现,比如QRCoder,这个库可以在NuGet中搜索到和引入。

    使用方法:

         /// <summary>
            /// 生成二维码
            /// </summary>
            /// <param name="text">二维码代表的字符串</param>
            /// <returns></returns>
            public async Task<BitmapImage> GenerateQrCode(string text)
            {
                var img = new BitmapImage();
    
                var qrGenerator = new QRCodeGenerator();
                var qrData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.M);
                var qrCode = new BitmapByteQRCode(qrData);
                var qrImage = qrCode.GetGraphic(20);
                using (var stream = new InMemoryRandomAccessStream())
                {
                    using (var writer = new DataWriter(stream.GetOutputStreamAt(0)))
                    {
                        writer.WriteBytes(qrImage);
                        await writer.StoreAsync();
                    }
                    await img.SetSourceAsync(stream);
                }
                return img;
            }

    关于识别二维码,使用QRCoder库似乎无法实现,可以使用ZXing.uwp这个库实现,实际上,这个ZXing.uwp库可以识别和生成二维码和条形码。

    使用方法:

             /// <summary>
            /// 识别二维码
            /// </summary>
            /// <param name="imgFile">二维码图片文件</param>
            /// <returns>二维码代表的图片</returns>
            public async Task<string> ReadQrCode(StorageFile imgFile)
            {
                WriteableBitmap img = await OpenWritableBitmapFile(imgFile);
    
                BarcodeReader reader = new BarcodeReader();
                reader.Options.CharacterSet = "UTF-8";
                Result result = reader.Decode(img);
                return result == null ? string.Empty : result.Text;
            }
    
            private async Task<WriteableBitmap> OpenWritableBitmapFile(StorageFile imgFile)
            {
                using (IRandomAccessStream stream = await imgFile.OpenAsync(FileAccessMode.Read))
                {
                    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
                    WriteableBitmap img = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
                    img.SetSource(stream);
                    return img;
                }
            }    
  • 相关阅读:
    python学习笔记(二十):异常处理
    python学习笔记(十九)面向对象编程,类
    发邮件
    网络编程
    python学习笔记(十八)python操作excel
    BZOJ 3413 匹配 (后缀自动机+线段树合并)
    BZOJ 2555 SubString (后缀自动机+LCT)
    BZOJ 1396 识别子串 (后缀自动机+线段树)
    BZOJ 2780 Sevenk Love Oimaster (后缀自动机+树状数组+dfs序+离线)
    BZOJ 3998 [TJOI2015]弦论 (后缀自动机)
  • 原文地址:https://www.cnblogs.com/mengnan/p/6790523.html
Copyright © 2011-2022 走看看