使用 zxing 读取图像中的二维码

Posted

技术标签:

【中文标题】使用 zxing 读取图像中的二维码【英文标题】:Reading QR Code in an image with zxing 【发布时间】:2014-02-24 14:33:12 【问题描述】:

我正在使用 C# 库来读取二维码。我发现的许多示例都基于旧版本的 zxing,其中 RGBLuminanceSource 构造函数仍然采用位图。在最新版本中,RGBLuminanceSource 只需要 byte[]。我尝试将位图转换为字节 [],但解码结果始终为空。

这是我用于转换的代码:

private byte[] GetRGBValues(Bitmap bmp)

  // Lock the bitmap's bits. 
  System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height);
  System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);

  // Get the address of the first line.
  IntPtr ptr = bmpData.Scan0;

  // Declare an array to hold the bytes of the bitmap.
  int bytes = bmpData.Stride * bmp.Height;
  byte[] rgbValues = new byte[bytes];
  // Copy the RGB values into the array.
  System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
  bmp.UnlockBits(bmpData);

  return rgbValues;

解码:

Bitmap bitmap = Bitmap.FromFile(@"C:\QRimages.jpg") as Bitmap;
LuminanceSource source = new RGBLuminanceSource(GetRGBValues(bitmap), bitmap.Width, bitmap.Height);

var binarizer = new HybridBinarizer(source);
var binBitmap = new BinaryBitmap(binarizer);
QRCodeReader reader = new QRCodeReader();
var result = reader.decode(binBitmap);

不知何故,结果总是为空。

另外,我们的要求是我们必须使用相机拍摄的图像。我试过这个:

Bitmap bitmap = Bitmap.FromFile(@"C:\QRimages.jpg") as Bitmap;
BarcodeReader reader = new BarcodeReader  AutoRotate = true, TryHarder = true ;
Result result = reader.Decode(bitmap);

它只适用于我在线下载的二维码图像,但如果我打印出该图像并用我的手机拍照,然后尝试处理该图像,结果返回为空。

任何建议将不胜感激。

这是我正在使用的图片:

【问题讨论】:

嘿,同样的事情。你解决过这个问题吗? 【参考方案1】:

尝试拍摄与表面平行的照片。它会解码。我试过了。

【讨论】:

以上是关于使用 zxing 读取图像中的二维码的主要内容,如果未能解决你的问题,请参考以下文章

java zxing实现二维码生成和解析zxing实现二维码生成和解析

在WPF中开启摄像头扫描二维码(Media+Zxing)

javagoogle的zxing架包生成二维码和读取二维码可带文字和logo

Java使用ZXing生成/解析二维码图片

[Python]在Windows系统中使用ZXing模块实现二维码条形码读码

引用ZXing生成二维码