我正在将ZXing.NET集成到WPF应用程序中,但我正在使用BarcodeReader.Decode方法来读取QR条形码。它有效,但现在我想知道当图像有多个QR条形码时会发生什么。我希望ZXing将它们全部读入数组。这可能吗?如果有,怎么样?我没有看到任何方法来做到这一点。
编辑: 我发现有一个名为QRCodeMultiReader的类可以用来读取多个QR条形码。但是您发送到decodeMultiple方法的参数是ZXing.BinaryBitmap类型。如何将位图转换为BinaryBitmap?
这就是我所拥有的,但是当我调用decodeMultiple时结果变量总是为null:
public static List<BarCodeDataContract> MultipleDecode(Bitmap image)
{
var converter = new ImageConverter();
var bytes = (byte[])converter.ConvertTo(image, typeof(byte[]));
LuminanceSource source = new RGBLuminanceSource(bytes, image.Width, image.Height);
var binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
var reader = new QRCodeMultiReader();
var results = reader.decodeMultiple(binaryBitmap);
var scannedQrBarcodes = new List<BarCodeDataContract>();
foreach (var result in results)
{
if (result == null || result.BarcodeFormat != BarcodeFormat.QR_CODE || !result.Text.Contains(":")) return null;
var qrCodeData = result.Text.Split(':');
if (qrCodeData.Length != 2) return null;
int numericCode;
if (int.TryParse(qrCodeData[0], out numericCode))
{
if (System.Enum.IsDefined(typeof(QrCodeActionPrefixType), (short)numericCode))
{
Guid guid;
if (Guid.TryParse(qrCodeData[1], out guid))
{
scannedQrBarcodes.Add(new BarCodeDataContract()
{
QrCodeActionPrefixType = (QrCodeActionPrefixType)numericCode,
BarCodeObjectUniqueId = guid
});
}
}
}
}
return scannedQrBarcodes;
}
答案 0 :(得分:1)
您可以使用处理LuminanceSource的Binarizer创建新的BinaryBitmap。这些都是ZXing相关的类。
要获取LuminanceSource,您可以创建一个通过Bitmap的新BitmapLuminanceSource。 (BitmapLuminanceSource&#39;基类是BaseLuminanceSource,基类是LuminanceSource,这就是你想要的)
Binarizer将您的LuminanceSource转换为BinaryBitmap。这意味着生成的图像将只有黑白像素或点(二进制)。有多种方法可以对图像进行二值化,有些方法更适合其他条件,例如深色背景。您可以尝试不同的二元化器。
代码:
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BitmapLuminanceSource(_insert your Bitmap here_)));
答案 1 :(得分:0)
BarcodeReader类实现两个接口:IBarcodeReader和IMultipleBarcodeReader。 IMultipleBarcodeReader接口支持DecodeMultiple方法。 如果仅将Property PossibleFormats设置为QR_CODE,则在调用DecodeMultiple时,BarcodeReader将在内部使用QRCodeMultiReader实现。如果您查找其他条形码类型,则使用GenericMultipleBarcodeReader。
顺便说一下。如果使用Structured Append支持生成QR_CODE,您将在ResultMetadata集合中找到找到的每个结果的序列号和奇偶校验信息。如果需要,该信息有助于以正确的顺序建立最终结果。