【Android QR Code】開源項目:ZXing(三)二維碼解碼


繼續上一節的內容

本節我們將對上一節的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解碼之后的字符串

 

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM