二维码的生成与解析
来源:互联网 发布:编程游戏 编辑:程序博客网 时间:2024/05/14 12:23
二维码的生成与解析
二维码的原理简介:二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。二维码中的黑白色表示二进制的0和1,所以信息可以通过一定的编码方式,将信息编入进二维码中。二维码具有多种编码,常用的有:PDF417、QR Code、Code 49、Code 16K、Code One等。
效果图
以下是二维码生成代码:
界面布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:orientation="vertical" tools:context="www.weshared.demo2.MainActivity"> <EditText android:id="@+id/edit_url" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入信息" /> <Button android:id="@+id/btn_get_erweima" android:layout_width="match_parent" android:text="生成二维码" android:layout_height="wrap_content" /> <ImageView android:layout_marginTop="100dp" android:layout_gravity="center" android:id="@+id/iv_erweima" android:layout_width="200dp" android:layout_height="200dp" /></LinearLayout>
MainActivity中代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener { private EditText editText; private Button btn; private ImageView imageView; private boolean isShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); initListener(); } private void init() { editText = (EditText) findViewById(R.id.edit_url); btn = (Button) findViewById(R.id.btn_get_erweima); imageView = (ImageView) findViewById(R.id.iv_erweima); } private void initListener() { btn.setOnClickListener(this); imageView.setOnLongClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_get_erweima: getErWeiMa(); isShow = true; break; } } @Override public boolean onLongClick(View view) { scanErWeiMa(); return true; } private void scanErWeiMa() { if (isShow) { BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); Bitmap bitmap = drawable.getBitmap(); int w = bitmap.getWidth(); int h = bitmap.getHeight(); int[] row = new int[w * h]; bitmap.getPixels(row, 0, w, 0, 0, w, h);//获取bitmap的像素点 Hashtable<DecodeHintType, String> table = new Hashtable<>(); table.put(DecodeHintType.CHARACTER_SET, "utf-8");//设置编码格式 QRCodeReader reader = new QRCodeReader(); BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(w, h, row))); try { Result result = reader.decode(binaryBitmap, table); String content = result.getText(); Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show(); } catch (NotFoundException e) { e.printStackTrace(); } catch (ChecksumException e) { e.printStackTrace(); } catch (FormatException e) { e.printStackTrace(); } } } public void getErWeiMa() { String content = editText.getText().toString().trim(); if (TextUtils.isEmpty(content)) return; Bitmap bitmap = createErWeiMa(content); if (bitmap == null) return; imageView.setImageBitmap(bitmap); } private Bitmap createErWeiMa(String content) { QRCodeWriter writer = new QRCodeWriter(); try { BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, //二维码的编码格式,与‘QRCodeWriter’对应 imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); return matrixChangeBitmap(matrix); } catch (WriterException e) { e.printStackTrace(); } return null; } private Bitmap matrixChangeBitmap(BitMatrix matrix) { if (matrix == null) throw new NullPointerException("matrix is null"); int width = matrix.getWidth(); int height = matrix.getHeight(); int[] row = new int[width * height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int color = Color.WHITE; if (matrix.get(i, j)) { color = Color.BLACK; } row[i + j * width] = color; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(row, 0, width, 0, 0, width, height); return bitmap; }}
0 0
- 二维码的生成与解析
- 二维码的生成与解析
- 二维码的生成与解析
- 二维码的生成与解析示例 生成二维码
- 二维码生成与解析
- 二维码生成与解析
- 二维码生成与解析
- 二维码生成与解析
- Android之二维码的生成与解析
- Android之二维码的生成与解析
- Android之二维码的生成与解析
- Android之二维码的生成与解析
- Android之二维码的生成与解析
- android二维码的生成与解析
- 安卓二维码的生成与解析
- ZXing实现二维码的生成与解析
- zxing 二维码的生成与解析
- 条形码、二维码的生成与扫描、解析本地二维码
- js基于cookie实现多域名单点登陆
- 1006. 换个格式输出整数 (15)
- java 数据库缓存实例
- Jenkins安装与配置
- 51Nod-1138-连续整数的和
- 二维码的生成与解析
- <LeetCode> 题247:线段树的查询(2)
- z最短路合集(贝尔曼福德算法+迪杰斯克拉算法+弗洛伊德算法)
- nagios下用grafana绘图(二)
- 利用Office 365 定制企业合同管理平台之测试系统完整性!
- mysql保存数据提示:Out of range value for column
- 985的红绿灯难题
- 1896: 985的买饮料难题
- POJ 1106 Transmitters(计算几何:叉积)