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;
                }
            }    
  • 相关阅读:
    Spring--自定义注解
    IntelliJ IDEA实用插件
    Zero date value prohibited解决方法
    如何保证幂等性
    Map遍历的几种方式
    Static关键字
    索引失效 -- 使用Between范围查询时
    接口的不同写法在Swagger上的不同
    js与jquery获取input输入框中的值
    一个简单的 aiax请求例子
  • 原文地址:https://www.cnblogs.com/mengnan/p/6790523.html
Copyright © 2011-2022 走看看