可以使用Zxing来获得条形码的bitmap.
1.绘制带有文字的条形码
由于直接不能绘制出带有文字的条形码.
我想到的解决方案是 需要绘制的条形码的高度的 3/4给条形码 1/4给文本.
先绘制条形码 得到bitmap 在创建bitmap 在底部绘制文字,合并两个bitmap.
2.绘制不带文字的条形码,只需要把绘制文本和bigbitmap去掉就行了.
3.使用代码需要先引入Zxing库
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.yiersan.wmsclient.utils.LogUtil;
import java.util.EnumMap;
import java.util.Map;
/**
* 使用Zxing生成二维码
*/
public class Barcode {
private static final int WHITE = 0xFFFFFFFF;
private static final int BLACK = 0xFF000000;
/**
*
* @param content 文本内容
* @param qrWidth 条形码的宽度
* @param qrHeight 条形码的高度
* @return bitmap
*/
public static Bitmap getBarcodeBitmap(String content, int qrWidth, int qrHeight) {
content = content.trim();
//文字的高度
int mHeight = qrHeight / 4;
try {
Map<EncodeHintType, Object> hints = new EnumMap(EncodeHintType.class);
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix result;
try {
result = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, qrWidth, mHeight * 3, hints);
} catch (IllegalArgumentException iae) {
return null;
}
int width = result.getWidth();
int height = result.getHeight();
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
int offset = y * width;
for (int x = 0; x < width; x++) {
pixels[offset + x] = result.get(x, y) ? BLACK : 0;
}
}
Bitmap qrBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
qrBitmap.setPixels(pixels, 0, width, 0, 0, width, height);
//大的bitmap
Bitmap bigBitmap = Bitmap.createBitmap(width, qrHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bigBitmap);
Rect srcRect = new Rect(0, 0, width, height);
Rect dstRect = new Rect(0, 0, width, height);
canvas.drawBitmap(qrBitmap, srcRect, dstRect, null);
Paint p = new Paint();
p.setColor(Color.BLACK);
p.setFilterBitmap(true);
//字体大小
p.setTextSize(mHeight);
//开始绘制文本的位置
canvas.translate(width / 2, mHeight);
p.setTextAlign(Paint.Align.CENTER);
canvas.drawText(content, 0, content.length(), 0, height, p);
return bigBitmap;
} catch (Exception e) {
return null;
}
}
}
Android 生成条形码 生成下方带文本的条形码
最新推荐文章于 2024-04-29 23:49:40 发布