Android 二維碼相關(二)
本篇文章繼續講述下如何使用zxing解析二維碼圖片,獲取內容.
1: 建立RGBLuminanceSource物件.
首先獲取二維碼圖片的bitmap物件.
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test);
根據getPixels()獲取點陣圖指定區域的畫素顏色值.
int width = srcBitmap.getWidth();
int height = srcBitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
//使用pixels陣列建立RGBLuminanceSource物件
RGBLuminanceSource rgbLuminanceSource = new RGBLuminanceSource(width, height, pixels);
2: 獲取BinaryBitmap物件
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(rgbLuminanceSource));
BinaryBitmap類的主要作用是為解碼器提供一個可讀取的二進位制影像。
解碼器可以使用BinaryBitmap來解碼包含在影像中的條形碼或二維碼。
3: 建立解碼器
MultiFormatReader類是ZXing庫中的核心類之一,它可以識別和解碼多種不同型別的條碼和二維碼.
MultiFormatReader multiFormatReader = new MultiFormatReader();
4: 解碼
try {
Result decode = multiFormatReader.decode(binaryBitmap);
String text = decode.getText();
return text;
} catch (Throwable e) {
Log.e(TAG, "decodeBitmap: ", e);
}
完整的程式碼如下:
/**
* @param srcBitmap 二維碼圖片
* @return 文案
*/
public static String decodeBitmap(Bitmap srcBitmap) {
if (srcBitmap == null) return "";
int width = srcBitmap.getWidth();
int height = srcBitmap.getHeight();
int[] pixels = new int[width * height];
srcBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
//使用Bitmap物件建立RGBLuminanceSource物件,該物件將被傳遞給zxing庫進行識別
RGBLuminanceSource rgbLuminanceSource = new RGBLuminanceSource(width, height, pixels);
//BinaryBitmap類的主要作用是為解碼器提供一個可讀取的二進位制影像。解碼器可以使用BinaryBitmap來解碼包含在影像中的條形碼或二維碼。
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(rgbLuminanceSource));
MultiFormatReader multiFormatReader = new MultiFormatReader();
try {
Result decode = multiFormatReader.decode(binaryBitmap);
String text = decode.getText();
return text;
} catch (Throwable e) {
Log.e(TAG, "decodeBitmap: ", e);
}
return "";
}
本文由部落格一文多發平臺 OpenWrite 釋出!