使用 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实现二维码生成和解析
javagoogle的zxing架包生成二维码和读取二维码可带文字和logo