好的,所以我打算把這裏有人使用zxing的機會拿過來。我正在開發一個Java應用程序,它需要做的事情之一就是將一個字節數組數據編碼成QR碼,然後在稍後解碼。使用zxing的QR碼編碼和解碼
這裏是什麼我的編碼器看起來像一個例子:
byte[] b = {0x48, 0x45, 0x4C, 0x4C, 0x4F};
//convert the byte array into a UTF-8 string
String data;
try {
data = new String(b, "UTF8");
}
catch (UnsupportedEncodingException e) {
//the program shouldn't be able to get here
return;
}
//get a byte matrix for the data
ByteMatrix matrix;
com.google.zxing.Writer writer = new QRCodeWriter();
try {
matrix = writer.encode(data, com.google.zxing.BarcodeFormat.QR_CODE, width, height);
}
catch (com.google.zxing.WriterException e) {
//exit the method
return;
}
//generate an image from the byte matrix
int width = matrix.getWidth();
int height = matrix.getHeight();
byte[][] array = matrix.getArray();
//create buffered image to draw to
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//iterate through the matrix and draw the pixels to the image
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int grayValue = array[y][x] & 0xff;
image.setRGB(x, y, (grayValue == 0 ? 0 : 0xFFFFFF));
}
}
//write the image to the output stream
ImageIO.write(image, "png", outputStream);
此代碼中的開始字節數組只是用來測試它。實際的字節數據將會變化。
這裏是我的解碼器看起來像:
//get the data from the input stream
BufferedImage image = ImageIO.read(inputStream);
//convert the image to a binary bitmap source
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
//decode the barcode
QRCodeReader reader = new QRCodeReader();
Result result;
try {
result = reader.decode(bitmap, hints);
} catch (ReaderException e) {
//the data is improperly formatted
throw new MCCDatabaseMismatchException();
}
byte[] b = result.getRawBytes();
System.out.println(ByteHelper.convertUnsignedBytesToHexString(result.getText().getBytes("UTF8")));
System.out.println(ByteHelper.convertUnsignedBytesToHexString(b));
convertUnsignedBytesToHexString(byte)
是轉換字節數組中的十六進制字符的字符串的方法。
當我嘗試的代碼這些兩個塊一起運行,這是輸出:
48454c4c4f
202b0b78cc00ec11ec11ec11ec11ec11ec11ec
顯然,文本被編碼,但實際的數據字節是完全關閉。任何幫助將不勝感激。
captureActivity拍攝QR碼的圖像後對其進行解碼,它根據QR碼中存儲的數據類型顯示結果。例如如果網站URL使用QR碼編碼,結果屏幕將會有一個按鈕來打開該URL和likevise。 我需要從SD卡讀取圖像,對它進行解碼並以相同的方式處理輸出zxing在通過captureActivity解碼的情況下。 在「結果結果」中輸出結果後需要做什麼? – 2012-03-28 12:31:33
您應該發佈一個新問題,詢問這個問題,並附上您的代碼示例。你會得到比我在這裏提供的更好的答案。 – LandonSchropp 2012-03-29 01:24:07