我正在尝试使用 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
背景为绿色(注 Intent 片宽度是ImageView
宽度的95%),白色部分属于图片。如您所见,有一个巨大的白色区域,可能占图像的 40%。
问题是为什么条纹没有填满我在 writer.encode()
方法中指定的全部(或大部分)宽度?我怎样才能强制发生这种情况?
更新:
对比例类型使用不同的值,我注意到白边仅出现在条形码的两侧,而不会出现在条形码的上方或下方。
最佳答案
条形码中的条形宽度必须为整数像素,否则会出现一些变形。条形码的宽度应满足这些限制。
这个用例的一个很好的解决方案是将宽度设置为 1。这将迫使图像尽可能小;窄条将是一个像素。然后你可以让 Android 完全按照你喜欢的方式缩放它。
关于android - Zxing:生成的条码不使用可用的全宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866283/