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); } }
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 : ""); }