码迷,mamicode.com
首页 > 移动开发 > 详细

安卓开发中使用ZXing生成解析二维码

时间:2018-07-14 23:35:58      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:and   protected   int   color   .text   cat   arc   bitmap   barcode   

编码示例

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生成解析二维码

标签:and   protected   int   color   .text   cat   arc   bitmap   barcode   

原文地址:https://www.cnblogs.com/buyishi/p/9311272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!