Android Using ZXing Generate QR Code

后端 未结 4 1137
你的背包
你的背包 2020-12-29 21:06

I was having some problem when trying to generate QR code in Android Programming. Here is the Tutorial I followed. When my generate button on click, I am calling this method

4条回答
  •  臣服心动
    2020-12-29 21:53

    ZXing library can provide easy way.

    Origin is : Generate QRCode Android Example

    add in dependencies

    compile 'com.google.zxing:core:3.2.1'
    

    Here is the method to conver string into QR Image

    private Bitmap TextToImageEncode(String Value) throws WriterException {
            BitMatrix bitMatrix;
            try {
                bitMatrix = new MultiFormatWriter().encode(
                        Value,
                        BarcodeFormat.DATA_MATRIX.QR_CODE,
                        QRcodeWidth, QRcodeWidth, null
                );
    
            } catch (IllegalArgumentException Illegalargumentexception) {
    
                return null;
            }
            int bitMatrixWidth = bitMatrix.getWidth();
    
            int bitMatrixHeight = bitMatrix.getHeight();
    
            int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];
    
            for (int y = 0; y < bitMatrixHeight; y++) {
                int offset = y * bitMatrixWidth;
    
                for (int x = 0; x < bitMatrixWidth; x++) {
    
                    pixels[offset + x] = bitMatrix.get(x, y) ?
                            getResources().getColor(R.color.black):getResources().getColor(R.color.white);
                }
            }
            Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444);
    
            bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight);
            return bitmap;
        }
    

    Save geneated qr image

     public String saveImage(Bitmap myBitmap) {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
            File wallpaperDirectory = new File(
                    Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY);
            // have the object build the directory structure, if needed.
    
            if (!wallpaperDirectory.exists()) {
                Log.d("dirrrrrr", "" + wallpaperDirectory.mkdirs());
                wallpaperDirectory.mkdirs();
            }
    
            try {
                File f = new File(wallpaperDirectory, Calendar.getInstance()
                        .getTimeInMillis() + ".jpg");
                f.createNewFile();   //give read write permission
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
                MediaScannerConnection.scanFile(this,
                        new String[]{f.getPath()},
                        new String[]{"image/jpeg"}, null);
                fo.close();
                Log.d("TAG", "File Saved::--->" + f.getAbsolutePath());
    
                return f.getAbsolutePath();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return "";
    
        }
    

提交回复
热议问题