Android条码扫描及图片生成
2015-06-16 00:53
567 查看
Android条码扫描及图片生成
上周和老婆去超市,结账的时候老婆拿出手机拍的会员卡照片,但是怎么都扫不出来。于是就产生的做一个扫码应用的想法,并且可以把扫到的内容生成图片,方便使用。Android条码扫描及图片生成
简介
效果图
QA
1导入工程各种zxing的类找不到各种ClassNotFoundException
2从相册选择图片及剪切功能实现
3对imageview的bitmap手动回收后下次进入Activity会停止运行log显示trying to use a recycled bitmap
4如何对相册选择的图片解码
5如何编码
简介
网络搜索发现主要有ZXing和Zbar这两个库,并且发现了牛人的帖子:《打造极致二维码扫描系列》 – ZXing开发详解
http://www.eoeandroid.com/thread-549171-1-1.html
(出处: eoe 移动开发者论坛)
楼主还无私的给出了源码,果断下载来,在此基础上增加生成图片的功能。
经过几天的加班,总算把想要的功能实现了,虽然界面比较简单,功能好用就行。这里记录下过程中的一下问题,方便查阅。
下载试用地址:http://shouji.baidu.com/software/item?docid=7773544
使用方法:
1. 通过camera扫描条形码或二维码,或者从相册选择,或者点击”条码生成”按钮
2. 在”扫描结果”界面输入需要生成的”内容”(扫描的结果也在这里),然后输入”卡名”,卡名是作为图片的保存名及显示在图片上面方便查看
3. 点绿色圆点按钮既可以生成图片,生成图片地址”/sdcard/shicard/”
4. 点击扫描界面右上角打开闪光灯,左上角打开查看图片界面
5. 生成的图片就可以到超市之类的地方了,省去了带着卡的麻烦
效果图
(1)扫描界面(2)扫描结果及生成图片界面
(3)从相册选择图片界面
QA
(1)导入工程各种zxing的类找不到,各种ClassNotFoundException
ANS:找了各种方法都不行,实在没办法重新下了一个ADT bundle竟然没问题了,不知道是不是和其他软件有冲突.(2)从相册选择图片及剪切功能实现
Ans:1>从相册选择图片
Intent innerIntent = new Intent(Intent.ACTION_PICK); innerIntent.setType("image/*"); startActivityForResult(innerIntent, REQUEST_CODE);
选择后在原Activity的onActivityResult(onResume在其之后)方法,用data.getData()获得选择图片的Uri.
2>考虑到选择图片全部解码速度会比较慢,对选择的图片进行剪切,刚开始直接时候返回的图片数据,但是经常识别不了。经过多次测试发现是返回数据用bundle传送数据,bundle传送数据大小有限,所以拿到的可能是缩略图的数据。后来改为保存剪切后的图片,在读这个图片,这样就正常了.
Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); imageuri = Uri.parse(IMAGE_LOCAL); intent.putExtra("crop",true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("noFaceDetection", true); //save file to sdcard/tmp.png intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageuri); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); startActivityForResult(intent, 0);
(3)对imageview的bitmap手动回收后,下次进入Activity会停止运行,log显示trying to use a recycled bitmap
ANS:在调用recycle函数的时候已经注意是在bitmap不会再使用的时候,多次实验发现只有在imageview不设置新的bitmap直接返回,下次再进入才会出错。查看xml文件,发现写成android:src=”@drawable/shadow”,这样返回的时候就回收了drawable/shadow,下次再进入Activity自然就使用了已回收的bitmap,改为android:background=”@drawable/shadow”后问题解决.
(4)如何对相册选择的图片解码
ANS:仿照camera的方法用multiFormatReader解码,不过相册图片是RGB格式就要多一步RGB到YUV的转换,再仿照camera二值化后就可以解码int[] lpixels = new int[lwidth*lheight]; photo.getPixels(lpixels, 0, lwidth, 0, 0, lwidth, lheight); //covert RGB to YUV RGBLuminanceSource source = new RGBLuminanceSource(lwidth, lheight, lpixels); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); rawResult = multiFormatReader.decodeWithState(bitmap);
(5)如何编码
ANS;取得编码内容和格式后使用multiformatwriter.encode()即可,然后生成数据转成RGB格式保存.相关文章推荐
- 开始写第一个android软件(聊天软件)
- Android Studio导入Project的方法
- android sdk manager 代理设置(送给牛逼的)
- Android上成功实现了蓝牙的一些Profile
- Android之ContentProvider详解
- Android跟蓝牙耳机建立连接有两种方式
- android开发出现No Launcher activity found错误的解决方案
- Android中ContentProvider组件详解
- Android自定义View——自定义搜索框(SearchView)
- android SDK manager 无法获取更新版本列表
- Android中Animation 详细解读
- Android中Broadcast Receiver组件详解
- Android开发之SQLite的使用方法
- Android 插件化 动态升级
- 基于XMPP协议的Android即时通信系
- Android源码分析-资源加载机制
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Android Volley完全解析(四),带你从源码的角度理解Volley
- Android apk动态加载机制的研究
- Android Volley完全解析(一),初识Volley的基本用法