zoukankan      html  css  js  c++  java
  • 关于生成二维码

    package com.example.qr_codescan;


    import java.util.Hashtable;

    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;

    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;
    /**
     * 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;
     * 在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,
     * 通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:
     * 它具有条码技术的一些共性:每种码制有其特定的字符集;
     * 每个字符占有一定的宽度;
     * 具有一定的校验功能等。
     * 同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点
     *
     *
     *
        Quick Response Code
     * @author 喆
     *常见的有PDF417、QR Code、Code 49、Code 16K、Code One等
     *
     * 功能
    ●信息获取(名片、地图、WIFI密码、资料)
    ●网站跳转(跳转到微博、手机网站、网站)
    ●广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
    ●手机电商(用户扫码、手机直接购物下单)
    ●防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
    ●优惠促销(用户扫码,下载电子优惠券,抽奖)
    ●会员管理(用户手机上获取电子会员信息、VIP服务)
    ●手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)
     */
    public class MainActivity extends Activity {
        
        private final static int SCANNIN_GREQUEST_CODE = 1;
        private static final int QR_WIDTH = 200;
        private static final int QR_HEIGHT = 200;
        /**
         * 显示扫描结果
         */
        private EditText mEditText_Result ;
        /**
         * 显示扫描拍的图片
         */
        private ImageView mImageView;
        /**
         * 输入的信息
         */
        private EditText mEditText;
        

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            mEditText_Result = (EditText) findViewById(R.id.result);
            mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);
            mEditText = (EditText) findViewById(R.id.et_msg);
            
            /**
             * 点击按钮跳转到二维码扫描界面,
             * 这里用的是startActivityForResult跳转
             * 扫描完了之后跳回该界面
             */
            scanQRCodeImage();
            
            /**
             * 生成二维码
             */
            findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    /**
                     * 生成二维码图片
                     */
                    createQRCodeImage();
                }
            });
        }
        
        
        private void scanQRCodeImage() {
            // TODO Auto-generated method stub
            findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, MipcaActivityCapture.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
                }
            });
        }


        protected void createQRCodeImage() {
            // TODO Auto-generated method stub
            QRCodeWriter writer = new QRCodeWriter();
            String text = mEditText.getText().toString();
            /**
             * 排除情况
             */
            if (text == null || "".equals(text) || text.length() < 1) {
                return;
            }
            /**
             *  把输入的文本转为二维码
             */
            try {
                BitMatrix martix = writer.encode(text, BarcodeFormat.QR_CODE,
                        QR_WIDTH, QR_HEIGHT);
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                BitMatrix bitMatrix = new QRCodeWriter().encode(text,
                        BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
                int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
                for (int y = 0; y < QR_HEIGHT; y++) {
                    for (int x = 0; x < QR_WIDTH; x++) {
                        if (bitMatrix.get(x, y)) {
                            pixels[y * QR_WIDTH + x] = 0xff000000;
                        } else {
                            pixels[y * QR_WIDTH + x] = 0xffffffff;
                        }
                    }
                }
                Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
                        Bitmap.Config.ARGB_8888);

                bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
                /**
                 * 显示
                 */
                mImageView.setImageBitmap(bitmap);
                
            } catch (WriterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        /**
         * 接受结果的方法
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
            case SCANNIN_GREQUEST_CODE:
                if(resultCode == RESULT_OK){
                    Bundle bundle = data.getExtras();
                    //显示扫描到的内容
                    mEditText_Result.setText(bundle.getString("result"));
                    //显示
                    mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
                }
                break;
            }
        }    

    }

  • 相关阅读:
    【leetcode】416. Partition Equal Subset Sum
    【leetcode】893. Groups of Special-Equivalent Strings
    【leetcode】892. Surface Area of 3D Shapes
    【leetcode】883. Projection Area of 3D Shapes
    【leetcode】140. Word Break II
    【leetcode】126. Word Ladder II
    【leetcode】44. Wildcard Matching
    【leetcode】336. Palindrome Pairs
    【leetcode】354. Russian Doll Envelopes
    2017.12.22 英语面试手记
  • 原文地址:https://www.cnblogs.com/taogev5/p/5714717.html
Copyright © 2011-2022 走看看