【问题标题】:How to cut generate time to generate QR Code using Zxing如何使用 Zxing 缩短生成 QR 码的时间
【发布时间】:2017-05-03 07:59:24
【问题描述】:

我正在创建一个带有 QR 条码的应用程序。条形码正确加载,但不知何故加载有点慢,在我点击/单击菜单后大约 3-5 秒。

我们可以让它更快吗?或者页面加载那么长是否正常?其他部分加载仅需 1 秒或更短。该应用程序也离线,因此不需要互联网连接。

这里是我生成二维码的代码:

ImageView imageViewBarcode = (ImageView)findViewById(R.id.imageViewBarcode);

    try {
        bitmap = TextToImageEncode(barcode_user);

        imageViewBarcode.setImageBitmap(bitmap);

    } catch (WriterException e) {
        e.printStackTrace();
    }

上面的代码放在 onCreate 里面。所以当页面加载时,它会生成条形码。

这里是创建条形码的功能

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.colorBlack):getResources().getColor(R.color.colorWhite);
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444);

    bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight);
    return bitmap;
}

【问题讨论】:

    标签: android qr-code


    【解决方案1】:

    您在双循环内调用 getResources().getColor() - 即当您的图像大小为 100*100 像素时,这将被调用 10000 次。而是将颜色值分配给循环外的一些变量,并在循环内使用这些变量。

    int color_black = getResources().getColor(R.color.colorBlack);
    int color_white = getResources().getColor(R.color.colorWhite);
    
    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) ? color_black : color_white;
        }
    }
    

    编辑:添加代码示例

    【讨论】:

    • 我不太明白如何实现它。要给我代码 sn-p 更新吗?
    • 您能解释一下您不明白的地方吗?
    • 谢谢@Okas!我会试试的,抱歉回复晚了。如果它有效,我会再次发布
    【解决方案2】:

    在这里的另一个线程上找到了这个:zxing generate QR。为我解决了类似的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2015-05-02
      • 2011-11-23
      相关资源
      最近更新 更多