如何在ZXing中将byte []转换回Barcode

时间:2015-05-22 05:46:08

标签: zxing

ZXing.Result获取的

ZXing.BarcodeReader提供了RawBytes byte[]的属性。但是,我已经尝试但无法在ZXing.BarcodeWriter中找到接受byte[]作为其参数的函数。

我想要ZXing.BarcodeWriter的条形码与ZXing.BarcodeReader读取的条形码完全相同。

  

说,条形码称为Code 128,

     

BarcodeReaderRawBytes开头提供3个字节,10510242

     

表示Code 128中的[Start Code C],[FNC 1],[42],

     

表示条形码以2位42开头。

找到这样一个函数的主要原因是,如果条形码转换为string并转换回来,元数据就会丢失。

  

string仅代表42,[启动代码C]和[FNC 1]丢失。

有功能吗?您可以假设条形码格式已知。

我使用的是ZXing.NET,但我认为不同平台的功能相似。

2 个答案:

答案 0 :(得分:0)

如果具有字节数组参数的编码方法可用,则它依赖于条形码类型。对于Aztec-Barcode,您可以使用com.google.zxing.aztec.encoder.Encoder类提供方法:

public static AztecCode encode(byte[] data)

QR码的编码器类例如没有提供带字节[]的编码方法。

答案 1 :(得分:0)

不,没有BarcodeWriter接受字节数组。 但您可以设置一个解释GS1符号系统的选项。

var reader = new BarcodeReader { Options = new DecodingOptions { AssumeGS1 = true } };

条形码阅读器现在将FNC1代码字转换为结果中的字符串表示形式,在您的情况下"] C142"。 FNC1表示"] C1"并非直观,但它在Code 128 5.4.6.4的GS1规范中定义。每个后续的FNC1代码字都被转换为组分隔符(GS / 0x1D /(char)29)。

另一方面,条形码编写器仅使用组分隔符。 这意味着如果您想从结果字符串生成相同的条形码,则必须替换前导"] C1"与"(char)29"。