Android 二维码

1.build.gradle

compile project(':zxingAndroid')
compile project(':QrCodeScan')

zxing:
https://github.com/zxing/zxing

QrCodeScan:
https://github.com/SkillCollege/QrCodeScan

2.

    /**
     * 扫描二维码
     * @param view
     */
    public void scan_code(View view) {
//        Intent intent = new Intent(Intents.Scan.ACTION);
        Intent intent = new Intent(this,CaptureActivity.class);
        intent.putExtra(Intents.Scan.WIDTH,400);
        intent.putExtra(Intents.Scan.HEIGHT,400);
        startActivityForResult(intent,SCAN_REQUEST);
    }


    /**
     * 创建二维码
     * @param view
     */
    public void create_code(View view) {
        Intent intent = new Intent(Intents.Encode.ACTION);
        intent.putExtra(Intents.Encode.DATA,"小熊爱洗澡");   //指定生成的编码数据
        intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT);   //生成编码数据类型
        intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.name());   //生成的编码格式 此处 二维码
        startActivityForResult(intent,ENCODE_CODE);
    }


    public void create_code_forme(View view){
        Bitmap bitmap = create2Code("熊大,熊二,光头强");
        if (bitmap != null) {
            mImage.setImageBitmap(bitmap);
        }
    }


    private Bitmap create2Code(String msg){
        //确认二维码大小
        int ret = 512;
        //二维码配置
        HashMap<EncodeHintType,Object> hint = new HashMap<>();
        //配置编码
        hint.put(EncodeHintType.CHARACTER_SET,"UTF-8");
        //容错级别
        hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

        QRCodeWriter writer = new QRCodeWriter();
        try {
            //返回一个矩阵        参数(消息,编码的格式,宽度,高度,配置)
            BitMatrix encode = writer.encode(msg, BarcodeFormat.QR_CODE, ret, ret, hint);
            int width = encode.getWidth();
            int height = encode.getHeight();
            int[] pixles = new int[width*height];
            //确定像素位置的颜色
            for (int y= 0;y<height;y++){
                int offsetY =y* width;
                for(int x=0;x<width;x++){
                    pixles[offsetY+x] = encode.get(x,y)?BLACK:WHITE;
                }
            }
            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            //像素颜色数组,偏移量,横向跨度,起始X,起始y,结束x,结束y
            bitmap.setPixels(pixles,0,width,0,0,width,height);
            if (bitmap != null) {
                Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.image);
                bitmap =  create2CodeIcon(bitmap,icon);
            }
            return bitmap;
        } catch (WriterException e) {
            e.printStackTrace();
        }
        //因为我们生成图片需要 一个byte[]
        return null;
    }

    private Bitmap create2CodeIcon(Bitmap code, Bitmap icon) {
        int codeWidth = code.getWidth();
        int codeHeight = code.getHeight();
        int iconWidth = icon.getWidth();
        int iconHeight = icon.getHeight();

        //缩放比例
        float scale = codeWidth * 1.0f / 5 / iconWidth;

        //创建一个空的bitmap
        Bitmap bitmap = Bitmap.createBitmap(codeWidth,codeHeight, Bitmap.Config.ARGB_8888);
        //创建一个bitmap画布
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(code,0,0,null);

        //缩放画布,达到比例缩放
        canvas.scale(scale,scale,codeWidth/2,codeHeight/2);

        canvas.drawBitmap(icon,(codeWidth-iconWidth)/2,(codeHeight-iconHeight)/2,null);
        canvas.save();
        code.recycle();
        icon.recycle();
        return bitmap;
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==SCAN_REQUEST&&resultCode == RESULT_OK){
            String code = data.getStringExtra(Intents.Scan.RESULT);
            mText.setText(code);
        }

        if(requestCode==SCAN_REQUEST_QR&&resultCode == RESULT_OK){
            String code = data.getStringExtra("data");
            mText.setText(code);
        }

    }

    public void qr_code_scan(View view) {
        Intent intent = new Intent(this,com.zbar.lib.CaptureActivity.class);
        startActivityForResult(intent,SCAN_REQUEST_QR);
    }

 

 

 

 

 

 

 

转载于:https://my.oschina.net/glfei/blog/2961100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值