问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android怎样生成条码和二维码

发布网友 发布时间:2022-04-22 03:15

我来回答

1个回答

热心网友 时间:2022-04-25 06:20

  一、问题描述   在开发中需要将信息转换为二维码存储并要求带有公司的logo,我们知道Google的Zxing开源项目就很好的帮助我们实现条形码、二维码的生成和解析,但带有logo的官网并没有提供demo,下面就通过实例看看如何实现以及Zxing的使用。   二、案例介绍   1、案例运行效果   2、案例准备工作   在项目中加入jar,只需加入core/zxing/zxing/   三、Zxing主要组件   1、BarcodeFormat   定义了不同的二进制编码方式,取值如下   EAN_13条形码,共计13位代码,比较常见,如商品上的包装上的都是这种条形码   CODE_QR二维码(矩阵码),比条形码存在更多信息,当下比较流行   CODE_128条形码 可表示可表示从 ASCII 0 到ASCII 127 共128个字符,用于企业管理,生产流程控制   CODE_39条形码,编制简单只接受如下43个字符   2、MultiFormatWriter   主要包含一个 encode()方法,可实现产生编码(条形、二维码)   BitMatrix encode(String contents, BarcodeFormat format, int width, int height,Hashtable hints)方法   参数:   contents:要编码的内容   format:编码格式(条形、二维)   width,height:生成码的大小   hints:包含EncodeHintType(编码提示类型)信息的集合,主要设置字符编码,比如支持汉字的utf-8,如下:   Hashtable hst = new Hashtable();   hst.put(EncodeHintType.CHARACTER_SET, “UTF-8″);   返回值:BitMatrix 二维矩阵点   3、BitMatrix   BitMatrix :表现为一个二维矩阵,x表示列的位置,y表示行的位置,循序从左上角开始,一列一列排列(先x后y)   主要方法:   getWidth():返回矩阵的宽度   getHeight():返回矩阵的高度   boolean get(x,y) :非常重要的方法,实现根据给定的x,y判断该位置是否有黑块   在产生二维码的应用中就是通过这个方法进行判断,然后把有黑块的点记录下来,使用Bitmap的setPixels()方法生成图形,详解案例的createCode()方法中的代码   四、完整代码   public class MainActivity extends Activity {   private EditText etCompany;   private EditText etPhone;   private EditText etEmail;   private EditText etWeb;   private Bitmap logo;   private static final int IMAGE_HALFWIDTH = 40;//宽度值,影响中间图片大小   @Override   protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   //获得资源图片,可改成获取本地图片或拍照获取图片   logo=BitmapFactory.decodeResource(super.getResources(),R.drawable.y014);   etCompany =(EditText) findViewById(R.id.etCompany);   etPhone=(EditText) findViewById(R.id.etPhone);   etEmail =(EditText) findViewById(R.id.etEmail);   etWeb =(EditText) findViewById(R.id.etWeb);   findViewById(R.id.but).setOnClickListener(new OnClickListener() {   @Override   public void onClick(View v) {   // TODO Auto-generated method stub   String company=etCompany.getText().toString().trim() ;   String phone =etPhone .getText().toString().trim() ;   String email = etEmail.getText().toString().trim() ;   String web = etWeb.getText().toString().trim() ;   //二维码中包含的文本信息   String contents= "BEGIN:VCARD/nVERSION:3.0/nORG:"+company+"/nTEL:"+phone+"/nURL:"+web+"/nEMAIL:"+email+"/nEND:VCARD";   try {   //调用方法createCode生成二维码   Bitmap bm=createCode(contents,logo,BarcodeFormat.QR_CODE);   ImageView img=(ImageView)findViewById(R.id.imgCode) ;   //将二维码在界面中显示   img.setImageBitmap(bm);   } catch (WriterException e) {   // TODO Auto-generated catch block   e.printStackTrace();   }   }   });   }   /**   * 生成二维码   * @param string 二维码中包含的文本信息   * @param mBitmap logo图片   * @param format 编码格式   * @return Bitmap 位图   * @throws WriterException   */   public Bitmap createCode(String string,Bitmap mBitmap, BarcodeFormat format)   throws WriterException {   Matrix m = new Matrix();   float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth();   float sy = (float) 2 * IMAGE_HALFWIDTH   / mBitmap.getHeight();   m.setScale(sx, sy);//设置缩放信息   //将logo图片按martix设置的信息缩放   mBitmap = Bitmap.createBitmap(mBitmap, 0, 0,   mBitmap.getWidth(), mBitmap.getHeight(), m, false);   MultiFormatWriter writer = new MultiFormatWriter();   Hashtable hst = new Hashtable();   hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码   BitMatrix matrix = writer.encode(string, format, 400, 400, hst);//生成二维码矩阵信息   int width = matrix.getWidth();//矩阵高度   int height = matrix.getHeight();//矩阵宽度   int halfW = width / 2;   int halfH = height / 2;   int[] pixels = new int[width * height];//定义数组长度为矩阵高度*矩阵宽度,用于记录矩阵中像素信息   for (int y = 0; y < height; y++) {//从行开始迭代矩阵   for (int x = 0; x < width; x++) {//迭代列   if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH   && y > halfH - IMAGE_HALFWIDTH   && y < halfH + IMAGE_HALFWIDTH) {//该位置用于存放图片信息   //记录图片每个像素信息   pixels[y * width + x] = mBitmap.getPixel(x - halfW   + IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH); } else {   if (matrix.get(x, y)) {//如果有黑块点,记录信息   pixels[y * width + x] = 0xff000000;//记录黑块信息   }   }   }   }   Bitmap bitmap = Bitmap.createBitmap(width, height,   Bitmap.Config.ARGB_8888);   // 通过像素数组生成bitmap   bitmap.setPixels(pixels, 0, width, 0, 0, width, height);   return bitmap;   }   }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中美有什么经济冲突 杨凌衡水实验中学高中学费是多少 蒂芙尼珍珠项链怎么清洗和保养? tiffany&amp;co 的缺点 如何保养蒂芙尼的项链? tiffany保养要多久时间 Tiffany珠宝需要多长时间保养? 人为什么活着,怎样活着都是无憾!! 孩子犟的不行家长怎么教育 有什么比较好用的游戏视频录制软件? 适用于Windows的10个好用的游戏录制软件 在android中怎么自动生成r文件 武夷岩茶有水仙,单枞也有水仙,是一样的吗?求科普 android studio怎样生成apk文件 怎么生成文件夹,在安卓手机上,在应用列表里 同为岩茶,水仙、肉桂有何不同? android中如何生成uid 大红袍与水仙的区别有哪些? 如何为每部Android手机生成一个唯一的ID 武夷水仙茶的介绍 岩茶水仙家族,老丛水仙,高丛水仙和水仙有什么区别 如何将android项目生成apk ? 水仙茶和肉桂茶哪个好? 如何将android应用生成签名 大红袍和水仙有什么区别?二者是什么关系? 如何生成release版本的Android系统 android 怎样生成签名文件 岩茶水仙怎么样 如何生成android签名文件 android的文件系统怎么生成 在熹茗茶业买的武夷山老丛水仙有什么功效? 超级店长是什么东西? 淘宝店铺的超级店长好不好? 淘宝超级店长怎么进入 在饿了么服务市场上买了个超级店长,有用吗? 淘宝网店 超级店长 在哪里找啊 qq超市超级店长管理能力怎么加 淘宝超级店长里面都有什么功能 饿了么超级店长是干嘛的 超级店长都是如何复制宝贝的? 生意参谋和超级店长的区别? 超级店长是什么意思? 淘宝卖家超级店长在哪里?为什么用不了? 淘宝超级店长是什么? 超级店长和生意参谋哪个效果更好?有什么区别吗? 美术工笔画需要什么样的颜料和画具,一般步骤是怎... 淘宝网店的超级店长有什么用处和好处 请教工笔画上底色的方法? 超级快车和超级店长是什么关系? 工笔画上色的步骤 QQ空间超级店长如何才能很快的升级?