android生成条码 并转换为Bitmap

时间:2022-11-11 21:07:00

android生成条码 并转换为Bitmap(zxing条码)

        菜鸟级别,大鸟跳过

        
        本文中使用了”zxing条码“中的core.jar包,请大家自行下载。
        本人使用的core.jar下载地址:http://download.csdn.net/detail/lidm_sn/4592321

        前段时间开发一款android应用程序,里面用到了“zxing条码”,网上资料也比较多,但是通过“zxing条码”生成条码后将其转换为android的Bitmap时网上给出的资料都比较琐碎,于是个人整理成了一个工具类,代码比较简单没过过多注释,有需要的童鞋可以拿来做参考或直接复制代码使用。(在次强调菜鸟级别,大鸟跳过)

        注:代码尽量个人手写一份增加记忆,不建议直接复制黏贴


        如有兴趣可以加入开发群:222579428(android)        

上代码:

package com.pcitc.ldm.demo.utils;

import java.util.Hashtable;

import android.graphics.Bitmap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

/**
 * @author LDM
 * @fileName BarcodeUtil.java
 * @data 2012-9-5 下午3:36:25
 * 条码生成工具
 */
public class BarcodeUtil {

	/**
	 * 生成二维码
	 * @param content 数据内容
	 * @param coding  编码如utf-8
	 * @param imgWidth 生成图片宽度
	 * @param imgHeight 生成图片高度
	 * @return Bitmap对象
	 * @throws WriterException
	 */
	public static Bitmap writeQR(String content, String coding, int imgWidth, int imgHeight) throws WriterException {
		Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
		hints.put(EncodeHintType.CHARACTER_SET, coding);
		BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, imgWidth, imgHeight, hints);
		return BitMatrixToBitmap(bitMatrix);
	}

	/**
	 * 生成条形码
	 * @param content 数据内容
	 * @param imgWidth 生成图片宽度
	 * @param imgHeight 生成图片高度
	 * @return Bitmap对象
	 * @throws WriterException
	 */
	public static Bitmap writeCode128(String content, int imgWidth, int imgHeight) throws WriterException {
		int codeWidth = 3 + (7 * 6) + 5 + (7 * 6) + 3;
		codeWidth = Math.max(codeWidth, imgWidth);
		BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, codeWidth, imgHeight,null);
		return BitMatrixToBitmap(bitMatrix);
	}

	/**
	 * BitMatrix转换成Bitmap
	 * @param matrix
	 * @return
	 */
	private static Bitmap BitMatrixToBitmap(BitMatrix matrix) {
		final int WHITE = 0xFFFFFFFF;
		final int BLACK = 0xFF000000;

		int width = matrix.getWidth();
		int height = matrix.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] = matrix.get(x, y) ? BLACK : WHITE;
			}
		}
		return createBitmap(width, height, pixels);
	}

	/**
	 * 生成Bitmap
	 * @param width
	 * @param height
	 * @param pixels
	 * @return
	 */
	private static Bitmap createBitmap(int width, int height, int[] pixels) {
		Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}

}