Android 二維碼相關(二) 本篇文章繼續講述下如何使用zxing解析二維碼圖片,獲取內容. 1: 創建RGBLuminanceSource對象. 首先獲取二維碼圖片的bitmap對象. Bitmap bitmap = BitmapFactory.decodeResource(getResour ...
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 發佈!