예제 #1
0
        private ZXing.LuminanceSource BitmapToLuminanceSource(System.Drawing.Bitmap bitmap)
        {
            using (MemoryStream memoryStream = new MemoryStream())
            {
                bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);

                byte[] arr = memoryStream.GetBuffer();

                ZXing.LuminanceSource source = new ZXing.RGBLuminanceSource(
                    arr,
                    bitmap.Width,
                    bitmap.Height,
                    ZXing.RGBLuminanceSource.BitmapFormat.Unknown);

                return(source);
            }
        }
예제 #2
0
        public static string QRDecoder(System.IO.Stream qrCodeFileStream)
        {
            var sKManagedStream = new SkiaSharp.SKManagedStream(qrCodeFileStream, true);
            var sKBitmap        = SkiaSharp.SKBitmap.Decode(sKManagedStream);

            sKManagedStream.Dispose();
            if (sKBitmap.IsEmpty)
            {
                sKBitmap.Dispose();
                throw new Exception("未识别的图片文件");
            }

            var w  = sKBitmap.Width;
            var h  = sKBitmap.Height;
            int ps = w * h;

            byte[] bytes     = new byte[ps * 3];
            int    byteIndex = 0;

            for (var x = 0; x < w; x++)
            {
                for (var y = 0; y < h; y++)
                {
                    var color = sKBitmap.GetPixel(x, y);
                    bytes[byteIndex + 0] = color.Red;
                    bytes[byteIndex + 1] = color.Green;
                    bytes[byteIndex + 2] = color.Blue;
                    byteIndex           += 3;
                }
            }
            sKBitmap.Dispose();

            var qRCodeReader       = new ZXing.QrCode.QRCodeReader();
            var rGBLuminanceSource = new ZXing.RGBLuminanceSource(bytes, w, h);
            var hybridBinarizer    = new ZXing.Common.HybridBinarizer(rGBLuminanceSource);
            var binaryBitmap       = new ZXing.BinaryBitmap(hybridBinarizer);
            var hints = new Dictionary <ZXing.DecodeHintType, object>();

            hints.Add(ZXing.DecodeHintType.CHARACTER_SET, "utf-8");
            var result = qRCodeReader.decode(binaryBitmap, hints);

            return(result != null ? result.Text : "");
        }