java - 显示 QR 码的更快方法/更好的想法?

标签 java android bitmap zxing qr-code

目前我正在使用它在我的 android 应用程序中生成和显示我的 QR 码:

    try {
        BitMatrix bm = qrwriter.encode(b.toString(), BarcodeFormat.QR_CODE,
                QRCODE_WIDTH, QRCODE_HEIGHT);
        final Bitmap mBitmap = Bitmap.createBitmap(bm.getWidth(),
                bm.getHeight(), Bitmap.Config.ARGB_4444);
        for (int i = 0; i < QRCODE_HEIGHT; i++) {
            for (int j = 0; j < QRCODE_WIDTH; j++) {
                mBitmap.setPixel(i, j, bm.get(i, j) ? Color.BLACK
                        : Color.WHITE);
            }
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                imgqrcode.setImageBitmap(mBitmap);
            }
        });
    } catch (WriterException e) {

    }

它工作正常,但使用嵌套循环非常慢。我必须将 QRCODE_WIDTHQRCODE_HEIGHT 设置为非常小的值(在高 dpi 设备上生成非常模糊的图像)只是为了让它在合理的时间内生成。理想情况下,我希望获得设备的分辨率并以此为基础设置 QR 码的大小,以便它始终看起来清晰。

我是否采取了错误的方法?有没有更快的方法?

最佳答案

您通过分析确定这是缓慢的部分吗?您可以尝试创建一个像素数组,然后一次设置所有像素,但这会占用更多内存。

你应该让二维码变小,让 UI 放大。不要以全尺寸渲染。如果它看起来很模糊,那么你需要禁用抗锯齿。

关于java - 显示 QR 码的更快方法/更好的想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17639984/

相关文章:

java - Android - 如何开始新 Activity

java - 使用 Fragment 库扩充类 fragment 时出错

Android Studio - Gradle KeyStore 签名配置

delphi - 透明位图作为资源?

java - 在android中删除位图

actionscript-3 - AS3 : Rotation into Vector

java - 在更改时自动编译 JasperReports

java - Slf4j with Log4j 在wrapper exception有消息时不打印wrapped exception (caused by)

java - JAVA中 volatile 写入之前是否存在LoadStore内存屏障

java - 在数据库中存储 10 个 UTF8 字符,文本字符计数器不会失败