package cn.mutils.app.zxing;
import android.graphics.Bitmap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.Result;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import java.util.HashMap;
@SuppressWarnings("unused")
public class QRCodeUtil {
public static final int COLOR_BLACK = 0xFF000000;
public static final int COLOR_WHITE = 0xFFFFFFFF;
public static final int DEFAULT_IMAGE_SIZE = 300;
public static final String DEFAULT_CHARSET = "UTF-8";
public static final String DEFAULT_IMAGE_FORMAT = "PNG";
public static final int DEAULT_MARGIN = 0;
protected static Bitmap convert(BitMatrix bitMatrix) {
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (bitMatrix.get(x, y)) {
pixels[y * width + x] = COLOR_BLACK;
} else {
pixels[y * width + x] = COLOR_WHITE;
}
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
public static Bitmap convert(String content) {
return convert(content, DEFAULT_IMAGE_SIZE, DEFAULT_IMAGE_SIZE);
}
public static Bitmap convert(String content, int width, int height) {
return convert(content, width, height, BarcodeFormat.QR_CODE);
}
protected static Bitmap convert(String content, int width, int height,
BarcodeFormat format) {
try {
HashMap<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, DEFAULT_CHARSET);
hints.put(EncodeHintType.MARGIN, DEAULT_MARGIN);
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
BitMatrix bitMatrix = multiFormatWriter.encode(content, format,
width, height, hints);
return convert(bitMatrix);
} catch (Exception e) {
return null;
}
}
public static String convert(Bitmap bitmap) {
try {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource rgbLuminanceSource = new RGBLuminanceSource(
width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
rgbLuminanceSource));
HashMap<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, DEFAULT_CHARSET);
MultiFormatReader multiFormatReader = new MultiFormatReader();
Result result = multiFormatReader.decode(binaryBitmap, hints);
return result.getText();
} catch (Exception e) {
return null;
}
}
}