1. 程式人生 > >安卓開發中使用ZXing生成解析二維碼

安卓開發中使用ZXing生成解析二維碼

roi contents arc bar white png 解析 tex span

編碼示例

package com.wolf_pan.qrcodesample;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView; import android.widget.LinearLayout; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import java.util.HashMap;
public class EncodingSampleActivity extends AppCompatActivity { private LinearLayout encodingSampleLinearLayout; private EditText textToEncodeEditText; private ImageView encodedImageView; private final String tag = "EncodingSampleActivity"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_encoding_sample); encodingSampleLinearLayout = findViewById(R.id.encodingSampleLinearLayout); textToEncodeEditText = findViewById(R.id.textToEncodeEditText); encodedImageView = findViewById(R.id.encodedImageView); findViewById(R.id.encodeButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String contents = textToEncodeEditText.getText().toString(); if (contents.isEmpty()) contents = "在此輸入要編碼的文本"; try { int width = encodingSampleLinearLayout.getWidth() - 50, height = width; HashMap<EncodeHintType, String> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); BitMatrix bitMatrix = new QRCodeWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints); int[] colors = new int[width * height]; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) colors[width * y + x] = bitMatrix.get(x, y) ? Color.RED : Color.WHITE; } Bitmap qrcodeBitmap = Bitmap.createBitmap(colors, width, height, Bitmap.Config.RGB_565); encodedImageView.setImageBitmap(qrcodeBitmap); } catch (WriterException ex) { Log.e(tag, "ex: " + ex); } } }); } }

解碼示例

package com.wolf_pan.qrcodesample;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;

import java.io.IOException;

public class DecodingSampleActivity extends AppCompatActivity {
    public ImageView qrcodeToDecodeImageView;
    public TextView decodedTextView;
    private Bitmap bitmap;
    private final String tag = "DecodingSampleActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_decoding_sample);
        qrcodeToDecodeImageView = findViewById(R.id.qrcodeToDecodeImageView);
        decodedTextView = findViewById(R.id.decodedTextView);
        findViewById(R.id.decodeButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    int width = bitmap.getWidth(), height = bitmap.getHeight();
                    int[] pixels = new int[width * height];
                    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
                    String decoded = new QRCodeReader().decode(new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(width, height, pixels)))).getText();
                    decodedTextView.setText(decoded);
                } catch (Exception ex) {
                    Log.e(tag, "ex: " + ex);
                }
            }
        });
        try {
            bitmap = BitmapFactory.decodeStream(getAssets().open("qrcode_qq.png"));
            qrcodeToDecodeImageView.setImageBitmap(bitmap);
        } catch (IOException ex) {
            Log.e(tag, "ex: " + ex);
        }
    }
}

安卓開發中使用ZXing生成解析二維碼