android - Zxing:生成的条码不使用可用的全宽

标签 android barcode 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,我希望黑色条纹出现在图像的最开始,并在最后结束。

不过,这是发生了什么:

barcode

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

问题是为什么条纹没有填满我在 writer.encode() 方法中指定的全部(或大部分)宽度?我怎样才能强制发生这种情况?

更新:

对比例类型使用不同的值,我注意到白边仅出现在条形码的两侧,而不会出现在条形码的上方或下方。

最佳答案

条形码中的条形宽度必须为整数像素,否则会出现一些变形。条形码的宽度应满足这些限制。

这个用例的一个很好的解决方案是将宽度设置为 1。这将迫使图像尽可能小;窄条将是一个像素。然后你可以让 Android 完全按照你喜欢的方式缩放它。

关于android - Zxing:生成的条码不使用可用的全宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866283/

相关文章:

java - ZXing 如何使用手电筒启动扫描仪?

java - Zxing - UPC+5补充条码检测

android - 全新安装 Eclipse,R 无法解析为变量

Android 6 三星 Touchwiz 启动器图标比非三星应用程序大

android - 我怎样才能实现这个 ListView 动画?

javascript - 在 Adob​​e Acrobat XI 中使用 JavaScript 修改 PDF 字段值

javascript - Quagga 不定位或解码条形码

iphone - 有没有查条形码的网站?

android - 邮件发送文字+图片->服务器

java - 使用 zxing/barcode4j 格式化 EAN8