最新项目需要使用到zxing生成条码,条码格式为CODE128,CODE128的规则可参考:点击打开链接。
当调用
MultiFormatWriter().encode(str,BarcodeFormat.CODE_128, mwidth, mHeight, hints)
后生成的矩阵数据转换为Bitmap图时,会产生很大的左右两边的空白,zxing提供了 EncodeHintType.MARGIN选项来设置左右空白,很多时候无效,但偶然会成功,很困惑,所以追踪了一下代码,明白了其生成的原理,现以源码解析的方式整理如下。
此处,以类似“901001*C005”格式的内容来分析,编码格式为CODE128。
1、
BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.CODE_128, mwidth, mHeight, hints);
此处没什么讲的生成条码/二维码的核心代码,zxing使用方法可以去百度/谷歌。
2、追踪encode函数,其原型MultiFormatWriter.java中,代码如下:
public BitMatrix encode(String contents,
BarcodeFormat format,
int width, int height,
Map<EncodeHintType,?> hints) throws WriterException {
Writer writer;
switch (format) {
case EAN_8:
writer = new EAN8Writer();
break;