Zxing:生成的条形码不使用可用的全宽度

吉尔赫姆

我正在尝试使用Zxing生成Code128条码:

try {
    int width = (int) (barcode.getWidth() * 0.95f);
    int height = (int) (width * 0.2f);
    BitMatrix bitMatrix = writer.encode(code.number, BarcodeFormat.CODE_128, width, height);
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < height; j++) {
            bitmap.setPixel(i, j, bitMatrix.get(i, j) ? Color.BLACK : Color.WHITE);
        }
    }
    barcode.setImageBitmap(bitmap);
} catch (WriterException e) {
    e.printStackTrace();
}

barcode位置为ImageView,其宽度设置为match_parent(边距为5dp),高度为wrap_content我生成的图像的长宽比为5:1,我希望黑色条纹出现在图像的最开始,并在最后结束。

但是,这是发生了什么:

条码

ImageView背景为绿色(请注意,图像宽度为宽度的95%ImageView),白色部分属于图像。如您所见,有一个巨大的白色区域,可能占图像的40%。

问题是为什么条纹不填充我在writer.encode()方法中指定的全部(或大部分)宽度我该如何强迫这种情况发生?

更新:

对于比例类型使用不同的值,我注意到白色边距仅出现在条形码的侧面,而从未出现在其上方或下方。

吉尔赫姆

这不是最通用的答案,但这就是我解决的方法:

我的代码使用Code128标准,其中每个符号都是11个条纹(黑色或白色)的组合。该代码还具有固定长度(20个字符)。因此我强制writer使用20 * 11像素宽度进行编码。代码周围的安静区域很小。

但是,出于缩放目的,该宽度不够好。视屏幕而定,图像将无法很好地缩放,以不均匀的方式扭曲条纹,使代码不可读。然后,我选择使用该时间20 * 11 * 4像素对图像进行过采样结果要好得多,因为现在图像正在按比例缩小,而不是像以前那样按比例放大。

过采样因数可能会因您需要显示的尺寸而异,但是如果您处于类似的情况下,则在固定长度的条形码和每个符号的情况下,这是获得具有最小静区的良好条形码的简便方法,并且不涉及任何进一步的图像处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章