在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;
            }
        }    
原文地址:https://www.cnblogs.com/mengnan/p/6790523.html