Emperor的专栏

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

下面就是android二维码生成的简单例子:

(注意要导入ZXing库,下载地址:)

package com.example.two_dimensional_test1;import java.util.Hashtable;import android.graphics.Bitmap;import android.widget.ImageView;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCodeWriter;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {private ImageView sweepIV;private int QR_WIDTH = 200, QR_HEIGHT = 200;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//这里就是一个imageView控件sweepIV = (ImageView)findViewById(R.id.imageView1);CreateQRImageTest imageTest = new CreateQRImageTest();imageTest.createQRImage("nihao"); //输入要生成的二维码的字符串}//生成二维码的类public class CreateQRImageTest{//要转换的地址或字符串,可以是中文public void createQRImage(String url){try{//判断URL合法性if (url == null || "".equals(url) || url.length() < 1){return;}Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//图像数据转换,使用了矩阵转换BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);int[] pixels = new int[QR_WIDTH * QR_HEIGHT];//下面这里按照二维码的算法,,逐个生成二维码的图片,//两个for循环是图片横列扫描的结果for (int y = 0; y < QR_HEIGHT; y++){for (int x = 0; x < QR_WIDTH; x++){if (bitMatrix.get(x, y)){pixels[y * QR_WIDTH + x] = 0xff000000;}else{pixels[y * QR_WIDTH + x] = 0xffffffff;}}}//生成二维码图片的格式,使用ARGB_8888Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);//显示到一个ImageView上面sweepIV.setImageBitmap(bitmap);}catch (WriterException e){e.printStackTrace();}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

有时不但是必要的,而且是很有必要的。

Emperor的专栏

相关文章:

你感兴趣的文章:

标签云: