如何在QR码的中心添加图像[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我正在尝试生成类似于WhatsApp Web中使用的QR码,其中心有一个徽标。

我正在使用'androidmads.library.qrgenearator:QRGenearator:1.0.3'库,我正在使用下面的代码生成QR码。

 start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            inputValue = edtValue.getText().toString().trim();
            if (inputValue.length() > 0) {
                WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
                Display display = manager.getDefaultDisplay();
                Point point = new Point();
                display.getSize(point);
                int width = point.x;
                int height = point.y;
                int smallerDimension = width < height ? width : height;
                smallerDimension = smallerDimension * 3 / 4;

                qrgEncoder = new QRGEncoder(
                        inputValue, null,
                        QRGContents.Type.TEXT,
                        smallerDimension);
                try {
                    bitmap = qrgEncoder.encodeAsBitmap();
                    qrImage.setImageBitmap(bitmap);
                } catch (WriterException e) {
                    Log.v(TAG, e.toString());
                }
            } else {
                edtValue.setError("Required");
            }
        }
    });

如何将图像添加到QR码?

java android qr-code
1个回答
0
投票

您是否尝试过使用ZXing,它是一个非常酷的QR码库和类似的东西,这是我一段时间做的方式:

//generate and set QR code
    ImageView imgQRCode = (ImageView) findViewById(R.id.imgQRCode);
    try {
        Bitmap qr = encodeAsBitmap("Any String HERE");

        if(qr != null)
            imgQRCode.setImageBitmap(qr);
        else {
            //Do whatever based on your logic
            //Toast.makeText(Prompt_ViewQRActivity.this, "Error message", Toast.LENGTH_LONG).show();
            //finish();
        }
    } catch (Exception e) {

    }

然后是“encodeAsBitmap”方法

Bitmap encodeAsBitmap(String str) throws WriterException {
    BitMatrix result;

    try {
        result = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 300, 300, null);
    } catch (IllegalArgumentException iae) {
        // Unsupported format
        return null;
    }

    int w = result.getWidth();
    int h = result.getHeight();

    int[] pixels = new int[w * h];

    for (int y = 0; y < h; y++) {
        int offset = y * w;

        for (int x = 0; x < w; x++) {
            pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.WHITE;
        }
    }

    Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, 300, 0, 0, w, h);

    return bitmap;
}
© www.soinside.com 2019 - 2024. All rights reserved.