/ / Como converter byte [] de volta para Barcode in ZXing - zxing

Como converter byte [] de volta para Barcode in ZXing - zxing

ZXing.Result obtido de ZXing.BarcodeReader fornece uma propriedade de RawBytes do byte[]. No entanto, tentei, mas não consegui encontrar uma função em ZXing.BarcodeWriter que aceita byte[] como seu argumento.

Eu quero ter um código de barras ZXing.BarcodeWriter que é exatamente o mesmo que ZXing.BarcodeReader lê.

digamos, um código de barras é conhecido como Código 128,

BarcodeReaderRawBytes começa com 3 bytes 105, 102, 42,

que significa [Start Code C], [FNC 1], [42] no Code 128,

o que significa que o código de barras começa com 2 dígitos 4, 2.

A principal razão para encontrar tal função é que os metadados são perdidos se um código de barras é convertido para string e convertido de volta.

string representa apenas 4 e 2, e [Start Code C] e [FNC 1] são perdidos.

Existe uma função para isso? Você pode assumir que o formato de código de barras é conhecido.

Estou usando o ZXing.NET, mas suponho que as funções sejam semelhantes em diferentes plataformas.

Respostas:

0 para resposta № 1

Depende do tipo de código de barras, se um codificarmétodo com um parâmetro de matriz de bytes está disponível. Para o código de barras asteca, você pode usar a classe com.google.zxing.aztec.encoder.Encoder, que fornece o método:

public static AztecCode encode(byte[] data)

A classe Encoder do QR-Code, por exemplo, não fornece um método de codificação com um byte [].


0 para resposta № 2

Não, não há BarcodeWriter que aceita uma matriz de bytes. Mas você pode definir uma opção que interprete a simbologia GS1.

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

O leitor de código de barras agora converterá o FNC1codeword para uma representação de string no resultado, no seu caso "] C142". A representação FNC1 "] C1" não é muito intuitiva, mas está definida na especificação GS1 para o Código 128 5.4.6.4. Cada palavra de código FNC1 seguinte é traduzida para o caractere separador de grupo (GS / 0x1D / (char) 29).

O escritor de código de barras, por outro lado, utiliza apenaso caractere separador de grupo. Isso significa que, se você quiser gerar o mesmo código de barras da sequência de resultados, substitua o "C1" inicial por "(char) 29".