`
xindrace
  • 浏览: 96691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android二维码的编码与解码(图片解码与摄像头解码)

阅读更多

今天上网找了找可以从图片解析二维码 ,而不是从摄像头,找了半天,终于找到了居然不全,所以自己查资料,写了一个 可以生产二维码,并且从图片和摄像头都可以解析的demo。



 

二维码其实很简单,我用的是Google的ZXing的源代码(在后面的附件里有)。

下面来看一下代码,注释我已经写的很明白了,就不解释了。

生成二维码图片

 

// 生成QR图
	private void encodeQRCode() {
		try {
			// 读取输入的String
			String text = qr_text.getText().toString();
			Log.i(TAG, "生成的文本:" + text);
			if (text == null || "".equals(text) || text.length() < 1) {
				return;
			}
			// android二维码的编码与解码(图片解码与摄像头解码)

			// 实例化二维码对象
			QRCodeWriter writer = new QRCodeWriter();
			// 用一个map保存编码类型
			Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
			// 保持字符集为“utf-8”
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
			/* 
			 * 第一个参数:输入的文本
			 * 第二个参数:条形码样式-》二维码
			 * 第三个参数:宽度
			 * 第四个参数:高度
			 * 第五个参数:map保存编码类型
			 */
			BitMatrix bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE,
					QR_WIDTH, QR_HEIGHT, hints);
			System.out.println("w:" + bitMatrix.getWidth() + "h:"
					+ bitMatrix.getHeight());
			// 将像素保存在数组里
			int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
			for (int y = 0; y < QR_HEIGHT; y++) {
				for (int x = 0; x < QR_WIDTH; x++) {
					if (bitMatrix.get(x, y)) {// 二维码黑点
						pixels[y * QR_HEIGHT + x] = 0xff000000;
					} else {// 二维码背景白色
						pixels[y * QR_HEIGHT + x] = 0xffffffff;
					}

				}
			}
			
			// 生成位图
			Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
					Bitmap.Config.ARGB_8888);
			/* 
			 * 第一个参数:填充位图的像素数组
			 * 第二个参数:第一个颜色跳过几个像素读取
			 * 第三个参数:像素的幅度
			 * 第四个参数:起点x坐标
			 * 第五个参数:起点y坐标
			 * 第六个参数:宽
			 * 第七个参数:高
			 */
			bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
			// 显示图片
			qr_image.setImageBitmap(bitmap);
		} catch (WriterException e) {
			e.printStackTrace();
		}
	}

 解析二维码图片:

 

// 解析QR图片
	private void decodeQRCode() {
		Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();
		hints.put(DecodeHintType.CHARACTER_SET, "utf-8");

		Bitmap bitmap = ((BitmapDrawable) qr_image.getDrawable()).getBitmap();
		RGBLuminanceSource source = new RGBLuminanceSource(bitmap);
		// 转成二进制图片
		BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
		// 实例化二维码解码对象
		QRCodeReader reader = new QRCodeReader();
		Result result;
		try {
			// 根据解码类型解码,返回解码结果
			result = reader.decode(bitmap1, hints);
			System.out.println("res:》》》》》》》:" + result.getText());
			// 显示解码结果
			qr_result.setText(result.getText());
		} catch (NotFoundException e) {
			e.printStackTrace();
		} catch (ChecksumException e) {
			e.printStackTrace();
		} catch (FormatException e) {
			e.printStackTrace();
		}
	}

 用摄像头解析就更简单了,直接Intent到ZXing中的CaptureActivity类 就OK了。

但是这样扫描完的二维码,自己也用不了呀。不用着急在CaptureActivity类的530行,也就是

 

 // 条码/二维码结果
  private void showResult(Result rawResult, ResultHandler resultHandler, Bitmap barcode)
  {
	  AlertDialog.Builder builder = new AlertDialog.Builder(this);
	  CharSequence displayContents = resultHandler.getDisplayContents();
	    if (barcode == null) {
	      builder.setIcon(R.drawable.launcher_icon);
	    } else {
	      
	    Drawable drawable = new BitmapDrawable(barcode);
	      builder.setIcon(drawable);
	    }

	    builder.setTitle("Result");
        builder.setMessage(displayContents);
        builder.setPositiveButton("OK",new OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Intent intent = new Intent(CaptureActivity.this,CaptureActivity.class);
				startActivity(intent);
			}
		});
        builder.setNegativeButton(R.string.button_cancel, new OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				CaptureActivity.this.finish();
				
			}
		});
        builder.show();
	  
  }

 这个方法中把所有的扫描结果返回了。你可以根据自己的选择往下写逻辑就行了。

源码都在附件里,有兴趣的可以看一下。

 

  • 大小: 113.3 KB
3
0
分享到:
评论
2 楼 sincerehui 2013-08-21  
   
1 楼 bravewly 2013-03-19  
为啥扫不出结果呢?
是我扫的方式不对么?

相关推荐

    C#二维码编码和解码

    【C#二维码编码和解码】是关于使用C#编程语言实现二维码的生成与解析的专题。二维码(Quick Response Code)是一种二维条形码,能够存储大量的文本信息,广泛应用于移动设备、产品标识、网址链接等领域。在本专题中...

    QR二维码编码及解码程序

    总结来说,这个"QR二维码编码及解码程序"涵盖了二维码的核心技术和实现,包括数据编码、纠错处理、图像生成与识别等关键环节。通过学习和研究这个项目,开发者可以深入理解二维码的工作机制,并可能将其应用于各种...

    二维码编码/解码器

    这个过程涉及到了编码与解码两个关键步骤,是现代数字生活中常见的数据交换形式。 在二维码编码过程中,工具会将输入的字符串(比如网址)通过特定算法转化为二进制数据,然后根据QR码的标准布局规则将其分布在...

    java的二维码编码与解码

    二维码解码 解码过程涉及读取二维码图像并提取其中的信息。在这个示例中,使用了`qrcode.jar`库来完成解码。以下是一般的解码流程: 1. 引入解码库:确保`qrcode.jar`在项目类路径中。 2. 读取图像:使用`...

    QRCode.jar包和二维码编码与解码的实现

    `Java利用QRCode.jar包实现二维码编码与解码.txt`这个文件可能是介绍如何在Java项目中具体使用`QRCode.jar`的教程或示例代码。它可能包含详细的步骤、示例代码以及可能出现的问题和解决方案。通过阅读和理解这个文件...

    Qr 二维码 编码及解码

    二、二维码解码 1. 图像预处理:首先对扫描到的二维码图像进行去噪、灰度化、二值化等处理,使得图像更利于识别。 2. 定位:通过识别定位图案和定时图案,确定二维码的位置和大小。 3. 校验:利用校正图案进行错误...

    android二维码 直接对图片编码解码

    这个是帮同学做完毕业设计后留下的东西,其实也就是到网上收集点资料整合下,不过支持android的资源真的很少,看在辛苦的份上,希望大家可怜点分点我,使用遇到问题的同学也可以联系我QQ:379754895,本人专职ios开发...

    Java版二维码编码与解码

    完整二维码编码和解码包,本人收集整合成一个包,并附带完整的工具方法和运行例子可直接使用到手机客户端或应用。 解压后,引用TwoDimCode.jar包,运行使用TwoDimCode.java 绝对超值,下载看看吧!

    Android二维码生成和解码源代码

    2. **二维码解码**: - 解码过程则需要`MultiFormatReader`,它可以读取多种格式的条码。 - 将捕获的二维码图像转换为`LuminanceSource`对象,这是ZXing中处理图像的基础接口。 - `LuminanceSource`对象可以转化...

    二维码 java android 编码 解码 jar

    2. **二维码解码**:解码则是读取二维码中的信息。同样,Zxing库提供了Reader接口,我们可以使用QRCodeReader类来解码二维码图像。在Android中,通常会通过Camera或从本地获取图片,然后使用DecodeHelper类进行解码...

    C#二维码编码解码器源码

    在IT行业中,二维码编码与解码是数据传输和信息交换的一种常见方式,特别是在移动设备上。C#作为.NET框架下的主流编程语言,提供了丰富的库和工具来实现二维码的生成和解析。本文将深入探讨C#二维码编码解码器源码的...

    java二维码编码解码测试

    **三、二维码解码** 解码过程是从二维码图像中提取出原始数据。使用QRCoder库,解码步骤如下: 1. 引入解码所需的类库: ```java import de.svenwoltmann.qrcoder.reader.QRCodeReader; import javax.imageio....

    二维码编码解码器源码20130905

    二维码编码解码器源码 本源码实现可以在C#中使用的1D/2D编码解码器。条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码;二维码也开始应用到很多场合,如火车票有二维码识别、网易的首页有二维码...

    .net二维码编码解码器源码

    与传统的条形码相比,二维码能够在更小的空间内存储更多的信息,包括文字、数字、网址、联系信息等,并且可以通过手机摄像头等设备轻松读取。二维码编码通常遵循国际标准,如ISO/IEC 18004。 在.NET环境中,二维码...

    二维码编码解码源代码qr实.rar

    二维码编码与解码是计算机视觉和移动应用领域中常见的技术,尤其在信息交换、广告推广、支付服务等方面广泛应用。此压缩包"二维码编码解码源代码qr实.rar"包含了一个.NET平台下的QR码生成和解析的实现,使用了Visual...

    C# 二维码编码和解码代码实现不调用控件

    C#写的二维码编码类和二维码解码类,不调用任何控件,方便翻译成任何语言,可在任意平台上运行。 内有说明文档,说明怎样设置和调用,使用非常的方便,编码一个类,解码一个类,不像网上搜索的那些各种复杂不好用,...

    二维码编码解码源代码

    3. 二维码解码过程: 解码时,扫描设备识别定位图案,确定二维码的边界,然后读取数据区域的单元格状态。根据预先定义的规则,将二进制数据还原为原始信息,如文本、URL等。解码过程中还需要进行错误校验和纠正,...

    最新二维码编码与解码平台(PDF417/QrCode/DataMatrix)

    2012年最新二维码编码和解码程序套件,是开发二维条码生成和自动识别应用参考实例。自动识别PDF417、QRCODE、DataMatrix和HanXin条码图形,同时又能将文本、图像、声音和指纹混合编码,生成二维条码。二维码种类包括...

    二维码中文编解码

    解码过程与编码相反,首先通过扫描设备读取二维码图像,然后对图像进行解析,找到定位图案、定时图案和版本信息等关键元素。根据这些元素确定数据区域,再进行错误纠正,恢复出原始的编码数据。解码器会识别出编码...

Global site tag (gtag.js) - Google Analytics