Zxing实现二维码生成,扫描代码段
2016-07-16 15:08
519 查看
ZXing是一个开源的条码生成和扫描库。它不但支持众多的条码格式,而且有各种语言的实现版本,它支持的语言包括:Java、 C++、 C#、 Objective-C、ActionScript以及Ruby。
http://code.google.com/p/zxing/downloads/list
版本:ZXing-2.3.0
(1)把ZXing的以下两个jar包放入android工程的libs下
引用
core/core.jar
javase/javase.jar
(2)生成二维码
Java代码
public class QRCodeGenerateActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qrcode_generate);
Button button = (Button) findViewById(R.id.generate_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = (EditText) findViewById(R.id.code_content);
Bitmap qrcode = generateQRCode(editText.getText().toString());
ImageView imageView = (ImageView) findViewById(R.id.code_image);
imageView.setImageBitmap(qrcode);
}
});
}
private Bitmap bitMatrix2Bitmap(BitMatrix matrix) {
int w = matrix.getWidth();
int h = matrix.getHeight();
int[] rawData = new int[w * h];
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
int color = Color.WHITE;
if (matrix.get(i, j)) {
color = Color.BLACK;
}
rawData[i + (j * w)] = color;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Config.RGB_565);
bitmap.setPixels(rawData, 0, w, 0, 0, w, h);
return bitmap;
}
private Bitmap generateQRCode(String content) {
try {
QRCodeWriter writer = new QRCodeWriter();
// MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 500, 500);
return bitMatrix2Bitmap(matrix);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
}
(3)扫描二维码
Java代码
private PreviewCallback mPreviewCallback = new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
int previewWidth = camera.getParameters().getPreviewSize().width;
int previewHeight = camera.getParameters().getPreviewSize().height;
PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(
data, previewWidth, previewHeight, 0, 0, previewWidth,
previewHeight, false);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new QRCodeReader();
// Reader reader = new MultiFormatReader();
try {
Result result = reader.decode(bitmap);
String text = result.getText();
Intent intent = new Intent();
intent.setData(Uri.parse(text));
setResult(RESULT_OK, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Not Found", Toast.LENGTH_SHORT).show();
}
}
};
http://code.google.com/p/zxing/downloads/list
版本:ZXing-2.3.0
(1)把ZXing的以下两个jar包放入android工程的libs下
引用
core/core.jar
javase/javase.jar
(2)生成二维码
Java代码
public class QRCodeGenerateActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qrcode_generate);
Button button = (Button) findViewById(R.id.generate_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = (EditText) findViewById(R.id.code_content);
Bitmap qrcode = generateQRCode(editText.getText().toString());
ImageView imageView = (ImageView) findViewById(R.id.code_image);
imageView.setImageBitmap(qrcode);
}
});
}
private Bitmap bitMatrix2Bitmap(BitMatrix matrix) {
int w = matrix.getWidth();
int h = matrix.getHeight();
int[] rawData = new int[w * h];
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
int color = Color.WHITE;
if (matrix.get(i, j)) {
color = Color.BLACK;
}
rawData[i + (j * w)] = color;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Config.RGB_565);
bitmap.setPixels(rawData, 0, w, 0, 0, w, h);
return bitmap;
}
private Bitmap generateQRCode(String content) {
try {
QRCodeWriter writer = new QRCodeWriter();
// MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 500, 500);
return bitMatrix2Bitmap(matrix);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
}
(3)扫描二维码
Java代码
private PreviewCallback mPreviewCallback = new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
int previewWidth = camera.getParameters().getPreviewSize().width;
int previewHeight = camera.getParameters().getPreviewSize().height;
PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(
data, previewWidth, previewHeight, 0, 0, previewWidth,
previewHeight, false);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new QRCodeReader();
// Reader reader = new MultiFormatReader();
try {
Result result = reader.decode(bitmap);
String text = result.getText();
Intent intent = new Intent();
intent.setData(Uri.parse(text));
setResult(RESULT_OK, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Not Found", Toast.LENGTH_SHORT).show();
}
}
};
相关文章推荐
- 安装scrapy各种问题
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- C#按值传递和按引用传递
- GitHub for Windows 安装失败,An error occurred attempting to install github 的解决办法
- SyntaxError: Non-ASCII character '\xb2' in file
- python_类方法
- C语言学习之位操作符的使用
- C#实现GDI+基本图的缩放、拖拽、移动
- Spring IOC注入(四)继承
- java集合之Set
- Github上fork之后如何保持同步
- 使用Python结合Face++ API识别人脸
- [加速]为conda添加国内镜像
- DELPHI XE开发Office Add-In
- python之urllib
- PHP-Mmecache操作类详细介绍
- Count and Say
- 如何去除discuz的powered by discuz!代码
- python替换文件中的指定内容
- c语言==指针(8)