二维码扫描.ppt

上传人:可**** 文档编号:91049621 上传时间:2023-05-21 格式:PPT 页数:24 大小:1.74MB
返回 下载 相关 举报
二维码扫描.ppt_第1页
第1页 / 共24页
二维码扫描.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《二维码扫描.ppt》由会员分享,可在线阅读,更多相关《二维码扫描.ppt(24页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Android是什么?AndroidAndroid是一个运行在嵌入式是一个运行在嵌入式LinuxLinux操作系统上的设备上的、操作系统上的设备上的、可灵活部署、可升级的、完全开源代码的、代码符合可灵活部署、可升级的、完全开源代码的、代码符合Apache Apache LicenseLicense、free-softwarefree-software和和open source licenseopen source license许可完全商业许可完全商业友好的移动系统平台。友好的移动系统平台。AndroidAndroid平台由平台由GoogleGoogle等公司发起建立的等公司发起建立的开发性厂

2、商联盟组织开发性厂商联盟组织Open Handset AllianceOpen Handset Alliance共同开发。共同开发。Android Android平台的目标是以更低的产品研发、设备部平台的目标是以更低的产品研发、设备部署和服务套件成本来开发具有良好界面的手持设备程署和服务套件成本来开发具有良好界面的手持设备程序和各种移动设备中间件程序。序和各种移动设备中间件程序。Android的特点无需任何许可就可以发布一个应用程序无需任何许可就可以发布一个应用程序AndroidAndroid平台所有的平台所有的APIAPI全部透明。无任何隐藏和附加权全部透明。无任何隐藏和附加权限即可查看所有

3、限即可查看所有APIAPI可自由的组合、修改、扩展任何可自由的组合、修改、扩展任何AndroidAndroid系统组件系统组件Android的资源系统以二维码扫以二维码扫描为例说明描为例说明:Android的权限控制在AndroidManifest.xml中描述一个app的权限例如:Activity的生命周期Activity简介在在Android 中规定所有的页面元素都必须以中规定所有的页面元素都必须以Activity形式展形式展现。现。Activity类中必须实现onCreate方法(此方法就是第一次程序界面展示给用户的初始化方法),必须在所有继承父类的接口处调用super类方法.setCo

4、ntentView()方法:Android中把界面布局元素的展示,存放在layout文件夹中的对应的xml文档中。此方法,根据自动生成的R对象中缓存的xml文档类装载入Activity.二维码扫描演示程序详解二维码扫描演示程序详解一、xml布局TextView用来存放解码后显示的信息 Surface 整个底层界面用来显示照相机拍摄到的图像FrontView 用来把显示到的图像周围都涂成半透明的白色,中间的空白区域用来扫描二维码ImageView 用来显示扫描二维码成功后截取到的图像TextView 用来简单介绍本软件可以扫描的范围Button 用来关闭软件和重新扫描二、Activity 程序重

5、要部分分析程序重要部分分析1、FrontView.javapublic void init()paint=new Paint();paint.setColor(Color.WHITE);paint.setAlpha(0 xff/2);protected void onDraw(Canvas canvas)int x;int y;int m=480;int n=350;x=canvas.getWidth();y=canvas.getHeight();canvas.drawRect(0,0,x,(y-n)/2,paint);canvas.drawRect(0,(y-n)/2,(x-m)/2,(y-

6、n)/2+n,paint);canvas.drawRect(x-m)/2+m,(y-n)/2,x,(y-n)/2+n,paint);canvas.drawRect(0,(y-n)/2+n,x,y,paint);初始化画笔,设置画笔的颜色,并把所绘的地区全部绘为(0 xff/2)半透明。得到canvas画布的长和宽(x,y)绘制四个周边矩形,所绘制的矩形都是半透明的有颜色,只剩下中间一块亮白的地方paint.setColor(Color.RED);canvas.drawLine(x-m)/2+10,(y-n)/2+10,(x-m)/2+50,(y-n)/2+10,paint);canvas.dr

7、awLine(x-m)/2+10,(y-n)/2+10,(x-m)/2+10,(y-n)/2+50,paint);canvas.drawLine(x-m)/2+m-10,(y-n)/2+10,(x-m)/2+m-50,(y-n)/2+10,paint);canvas.drawLine(x-m)/2+m-10,(y-n)/2+10,(x-m)/2+m-10,(y-n)/2+50,paint);canvas.drawLine(x-m)/2+10,(y-n)/2+n-10,(x-m)/2+10,(y-n)/2+n-50,paint);canvas.drawLine(x-m)/2+10,(y-n)/2

8、+n-10,(x-m)/2+50,(y-n)/2+n-10,paint);canvas.drawLine(x-m)/2+m-10,(y-n)/2+n-10,(x-m)/2+m-10,(y-n)/2+n-50,paint);canvas.drawLine(x-m)/2+m-10,(y-n)/2+n-10,(x-m)/2+m-50,(y-n)/2+n-10,paint);canvas.drawLine(210,400,270,400,paint);canvas.drawLine(240,370,240,430,paint);设置画笔的颜色在扫描区四个角绘制互相垂直的两条直线在扫描中间区域绘制两条垂

9、直的直线2、BackGround.javapublic class BackGround extends View private Paint paint;public BackGround(Context context,AttributeSet attrs)super(context,attrs);init();public BackGround(Context context)super(context);init();private void init()paint=new Paint();paint.setColor(Color.GRAY);protected void onDraw

10、(Canvas canvas)int x,y;x=canvas.getWidth();y=canvas.getHeight();canvas.drawRect(0,700,480,800,paint);此java文件主要是自定义一个方法,用以在添加的Button下面作为背景图片调用初始化方法init()初始化画笔,并设置颜色得到画布的长和宽,并绘制一个宽480,长100的矩形2、PictureSurfaceTest.javapublic void surfaceCreated(SurfaceHolder holder)try Log.e(Camera,Camera open);flag=tru

11、e;mCamera=Camera.open();mCamera.setPreviewDisplay(sfh);catch(Exception e)Log.e(Camera,Camera open exception);e.printStackTrace();mCamera.release();flag=false;mCamera=null;此java文件用来调用系统照相机,并实现拍照和自动对焦打开照相机,并实现预览mCamera.setPreviewDisplay(sfh);如果出现异常则释放照相机资源private void startPerview()if(mCamera!=null&!i

12、sStartPerview)mCamera.setDisplayOrientation(90);Log.e(tag,set Camera parameters);Camera.Parameters parameters=mCamera.getParameters();Log.e(tag,parameters.flatten();parameters.flatten();parameters.setPreviewSize(800,480);mCamera.setParameters(parameters);Log.e(tag,Camera parameters end);mCamera.star

13、tPreview();isStartPerview=true;如果照相机拍到的照片不为NULL,并且没有开始预览,则把拍到的图片旋转90度设置预览照片的大小(800*480);开始调用预览方法mCamera.startPreview();public void surfaceDestroyed(SurfaceHolder holder)mCamera.stopPreview();mCamera.release();flag=false;mCamera=null;public void Onfocus()if(mCamera!=null)mCamera.autoFocus(callback);p

14、rivate AutoFocusCallback callback=new AutoFocusCallback()public void onAutoFocus(boolean success,Camera camera)if(success&mCamera!=null)mCamera.setOneShotPreviewCallback(previewcallback);public void restart()mCamera.startPreview();释放照相机资源并停止拍照用Onfocus()实现自动对焦Onfocus()的回调函数当成功对焦并且照像不为空时,调用setOneShotP

15、reviewCallback()照相机重新启动3、PictureTest.javaprivate void initView()Log.e(tag,begin init);surCameraView=(PictureSurfaceTest)findViewById(R.id.surfaceView);surretake=(PictureSurfaceTest)findViewById(R.id.surfaceView);frontview=(FrontView)findViewById(R.id.frontView);background=(BackGround)findViewById(R.

16、id.background);cancel=(Button)findViewById(R.id.cancel);retake=(Button)findViewById(R.id.retake);/editText=(EditText)findViewById(R.id.edittext);textView=(TextView)findViewById(R.id.textview);imageView=(ImageView)findViewById(R.id.imageview);surCameraView.previewcallback=previewcallback;mTimer=new T

17、imer();mTimerTask=new MyTimerTask();mTimer.schedule(mTimerTask,0,200);初始化函数,用来初始化各种控件初始化定时器mTimer扫描的频率为200mspublic void ClickLietener()cancel.setOnClickListener(new OnClickListener()public void onClick(View v)surCameraView.flag=false;mTimer.cancel();mTimerTask.cancel();frontview.init();finish(););re

18、take.setOnClickListener(new OnClickListener()public void onClick(View v)surCameraView.flag=true;mTimer=new Timer();mTimerTask=new MyTimerTask();mTimer.schedule(mTimerTask,0,200);surCameraView.Onfocus();textView.setText(null);frontview.init();imageView.setVisibility(ImageView.INVISIBLE););关闭按钮,按下后退出程

19、序,并且释放照相机资源和mTimerTask和Timer重扫按钮,按下后初始化给种方法,并且取得照相机资源,把开始显示到的二维码信息抹除和把扫描到的二维码相片设置为不可见,这样我们就能看到一个初始化后的扫描界面public void run()Log.e(tag,run 执行);if(surCameraView.flag=true)surCameraView.Onfocus();else surCameraView.flag=false;mTimer.cancel();线程run()方法中实现,当获得照相机资源时,调用自动对焦方法,否则的话,则释放照相机资源和mTimer资源private C

20、amera.PreviewCallback previewcallback=new Camera.PreviewCallback()public void onPreviewFrame(byte data,Camera arg1)Log.e(tag,previewcallback);PlanarYUVLuminanceSource source=new PlanarYUVLuminanceSource(data,800,480,dsLeft,dstop,dswidth,dsheight);mbitmap=source.renderCroppedGreyscaleBitmap();/显示灰度图M

21、atrix matrix=new Matrix();matrix.setRotate(90);mbitmap=Bitmap.createBitmap(mbitmap,0,0,400,350,matrix,true);BinaryBitmap bitmap=new BinaryBitmap(new HybridBinarizer(source);MultiFormatReader reader=new MultiFormatReader();try Result result=reader.decode(bitmap);String strResult=BarcodeFormat:+result

22、.getBarcodeFormat().toString()+text:+result.getText();frontview.init();textView.setText(strResult);imageView.setImageBitmap(mbitmap);imageView.setVisibility(ImageView.VISIBLE);surCameraView.flag=false;mTimer.cancel();mTimerTask.cancel();catch(Exception e)textView.setText(“Scanning);取得指定范围的帧的数据显示灰度图,并且把它旋转90度在屏幕上方的Textview中显示解码到的信息,在imageView中显示截取到的二维码图片,把图片设置为可见释放mTimer和mTimerTask资源三、解码包可以到网上其他的二维码扫描代码中取得这样一个解码包,也可以去google官方下载四、软件开始界面和扫描后界面实例谢谢观看!精品课件精品课件!精品课件精品课件!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com