繼續上一節的內容
本節我們將對上一節的QQ群號二維碼進行解碼
QQ群號二維碼圖片另存為后,將下載的.jpg拷貝到項目assets目錄下
1、解碼配置
Map<DecodeHintType,Object> hints = new EnumMap<DecodeHintType,Object>(DecodeHintType.class); Collection<BarcodeFormat> decodeFormats = EnumSet.noneOf(BarcodeFormat.class); decodeFormats.addAll(EnumSet.of(BarcodeFormat.QR_CODE)); hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
配置需要解碼的圖片格式為二維碼,字符集編碼為UTF-8
2、加載圖片
private BinaryBitmap loadImage(String fileName, Context context) throws IOException { Bitmap bitmap = BitmapFactory.decodeStream(context.getResources().getAssets().open(fileName)); int lWidth = bitmap.getWidth(); int lHeight = bitmap.getHeight(); int[] lPixels = new int[lWidth * lHeight]; bitmap.getPixels(lPixels, 0, lWidth, 0, 0, lWidth, lHeight); return new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(lWidth, lHeight, lPixels))); }
首先,從assets目錄下加載圖片,編碼為Android定義的位圖Bitmap對象
然后,取得該圖片的像素數據,存入整形數組中
最后,將圖片的像素數據,轉成ZXing定義的位圖BinaryBitmap對象
類BinaryBitmap:This class is the core bitmap class used by ZXing to represent 1 bit data. Reader objects accept a BinaryBitmap and attempt to decode it.
注意:目前僅支持.jpg格式圖片
3、解碼
Result lResult = new MultiFormatReader().decode(loadImage(fileName, context), hints); String lText = lResult.getText();
lText解碼之后的字符串
運行結果: