一种扫描二维码的方法和装置的制造方法

文档序号:10570316阅读:432来源:国知局
一种扫描二维码的方法和装置的制造方法
【专利摘要】本发明公开了一种扫描二维码的方法和装置,所述方法包括:应用启动系统相机;应用通过系统相机的相机预览框获取相机图像,将相机图像进行旋转,根据旋转后的相机图像及扫描框图像在旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框图像;应用对获取到的扫描框图像进行解码。本发明仅对与相机预览框中的扫描框对应的包括二维码图像的扫描框图像进行解析,不需要对扫描框之外的其他图像进行解析,提高了解码效率。
【专利说明】
一种扫描二维码的方法和装置
技术领域
[0001] 本发明涉及通信领域,尤其涉及一种扫描二维码的方法和装置。
【背景技术】
[0002] 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规 律在平面(二维方向上)分布的黑白相间的图形,可以用于记录数据符号信息,具有高密度 编码,信息容量大,编码范围广等特点。
[0003] 现有技术中,在扫描二维码时,需要用户将二维码图像放置在相机的预览框中,通 过相机的预览框获取到的图像中包括二维码图像和二维码图像之外的其他图像;在对图像 进行解析时,需要对通过相机的预览框获取到的所有图像进行解析,使得解码效率低、耗时 长。

【发明内容】

[0004] 本发明的目的是为了克服现有技术的不足,提供一种扫描二维码的方法和装置。
[0005] 本发明提供的一种扫描二维码的方法,包括:
[0006] 步骤S1:应用启动系统相机;
[0007] 步骤S2:所述应用通过所述系统相机的相机预览框获取相机图像,将所述相机图 像进行旋转,根据旋转后的相机图像及扫描框图像在所述旋转后的相机图像中的位置,在 旋转后的相机图像中获取与扫描框对应的扫描框图像;
[0008] 步骤S3:所述应用对获取到的扫描框图像进行解码。
[0009] 本发明提供的一种扫描二维码的装置,包括:启动模块、第一获取模块和解码模 块;
[0010] 包括:启动模块、第一获取模块和解码模块;
[0011]所述启动模块,用于启动系统相机;
[0012] 所述第一获取模块,用于当所述启动模块启动所述系统相机后,通过所述系统相 机的相机预览框获取相机图像,将所述相机图像进行旋转,根据旋转后的相机图像与扫描 框图像在所述旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫 描框图像;
[0013] 所述解码模块,用于对所述第一获取模块获取到的扫描框图像进行解码。
[0014] 本发明与现有技术相比,具有以下优点:
[0015] 本发明提供的一种扫描二维码的方法和装置,仅对与相机预览框中的扫描框对应 的包括二维码图像的扫描框图像进行解析,不需要对扫描框之外的其他图像进行解析,提 高了解码效率。
【附图说明】
[0016] 图1是本发明实施例1提供的一种扫描二维码的方法的流程图;
[0017]图2和图3是本发明实施例2提供的一种扫描二维码的方法的流程图;
[0018] 图4是本发明实施例2中步骤114的流程图;
[0019] 图5为本发明实施例3提供的一种扫描二维码的装置的结构图。
【具体实施方式】
[0020] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0021] 实施例1
[0022] 本发明的实施例1提供了一种扫描二维码的方法,如图1所示,包括:
[0023]步骤S1:应用启动系统相机;
[0024]步骤S1具体包括:
[0025] 应用设置界面控制器的回调,应用创建相机对象;应用根据创建的相机对象,获取 当前相机参数;应用根据相机对象,启动系统相机的相机预览框。
[0026] 步骤S2:应用通过系统相机的相机预览框获取相机图像,将相机图像进行旋转,根 据旋转后的相机图像及扫描框图像在旋转后的相机图像中的位置,在旋转后的相机图像中 获取与扫描框对应的扫描框图像;
[0027]步骤S3:应用对获取到的扫描框图像进行解码。
[0028] 具体地,应用对获取到的扫描框图像的数据进行解码,判断解码是否成功,是则确 定扫描二维码成功,结束,否则返回步骤S2。
[0029] 本实施中,启动系统相机之前还可以包括:应用判断系统相机是否存在,如果是, 则启动系统相机,执行步骤S2;否则,结束。
[0030] 本实施例中,将相机图像进行旋转之前,还包括:应用获取当前屏幕的分辨率,在 系统相机支持的预览图尺寸中获取与当前屏幕的分辨率最接近的值作为系统相机的相机 分辨率,根据相机分辨率设置相机图像。
[0031] 其中,获取当前屏幕的分辨率,包括:
[0032]步骤S4-1:应用根据系统提供的窗口服务,获取当前应用的窗体管理器对象;
[0033]步骤S4-2:应用根据获取到的窗体管理器对象,创建窗体显示类的对象;
[0034]步骤S4-3:应用根据创建的窗体显示类的对象,获取当前屏幕的分辨率;
[0035]步骤S4-4:应用判断当前屏幕的分辨率中的属性x的值是否小于属性y的值,是则 将当前屏幕的分辨率中的属性x的值与属性y的值进行交换,确定获取到当前屏幕的分辨 率,否则确定获取到当前屏幕的分辨率。
[0036] 其中,在系统相机支持的预览图尺寸中获取与当前屏幕的分辨率最接近的值作为 相机分辨率,包括:
[0037] 步骤A01:应用初始化相机分辨率横坐标、相机分辨率纵坐标、第一差值和计数器; [0038]步骤A02:应用根据第二预设字符串,获取模板类的对象;
[0039]步骤A03:应用根据获取到的模板类的对象,将当前相机支持的预览图尺寸分割为 预览图尺寸字符串数组;
[0040] 步骤A04:应用判断计数器的值是否大于预览图尺寸字符串数组中的数据个数,是 则执行步骤A12,否则执行步骤A05;
[0041] 步骤A05:应用在预览图尺寸字符串数组中获取与计数器的值对应的预览图尺寸 字符串,即当前预览图尺寸;
[0042]步骤A06:应用获取第三预设字符串在当前预览图尺寸中的位置作为分割位置; [0043]步骤A07:应用在当前预览图尺寸中获取分割位置及分割位置之前的数据,根据获 取到的数据更新相机分辨率横坐标,应用在当前预览图尺寸中获取分割位置之后的数据, 根据获取到的数据更新相机分辨率纵坐标;
[0044] 步骤A08:应用对相机分辨率横坐标、相机分辨率纵坐标和当前屏幕的分辨率进行 计算,得到当前差值;
[0045] 步骤A09:应用判断当前差值是否为0,是则执行步骤All,否则执行步骤A10;
[0046] 具体地,应用计算相机分辨率横坐标与当前屏幕的分辨率中的属性x的绝对值,计 算相机分辨率纵坐标与当前屏幕的分辨率中的属性y的绝对值,将两次计算得到的绝对值 求和,得到当前差值,判断当前差值是否为〇,是则执行步骤All,否则执行步骤A10。
[0047] 步骤A10:应用判断当前差值是否小于第一差值,是则根据当前差值更新第一差 值,更新计数器,返回步骤A04;否则更新计数器,返回步骤A04;
[0048] 步骤All:应用判断相机分辨率横坐标和相机分辨率纵坐标是否均大于0,是则执 行步骤A12,否则结束;
[0049] 步骤A12:应用以相机分辨率横坐标和相机分辨率纵坐标作为参数,创建系统坐标 点类的对象作为相机分辨率。
[0050] 本实施例中,根据旋转后的相机图像及扫描框图像在旋转后的相机图像中的位 置,在旋转后的相机图像中获取与扫描框对应的扫描框图像之前,还包括:应用根据当前应 用父布局、扫描框布局和相机图像,计算扫描框图像在旋转后的相机图像中的位置。
[0051] 其中,根据当前应用父布局、扫描框布局和相机图像,计算扫描框图像在旋转后的 相机图像中的位置,包括:
[0052] 步骤B01:应用获取扫描框布局的左侧与当前应用父布局的左侧之间的距离作为 布局文件扫描框左顶点横坐标,获取扫描框布局的顶部与当前应用父布局的顶部之间的距 离作为布局文件扫描框左顶点纵坐标,获取预览框布局的宽度作为布局文件预览框宽度; 获取预览框布局的高度作为布局文件预览框高度;
[0053]步骤B02:应用根据布局文件扫描框左顶点横坐标、布局文件预览框宽度和相机图 像的高度得到扫描框图像在旋转后的相机图像中的左顶点的横坐标,根据布局文件扫描框 左顶点纵坐标、布局文件预览框高度和相机图像的宽度得到扫描框图像在旋转后的相机图 像中的左顶点的纵坐标,根据预设的布局文件扫描框宽度、相机图像的高度和布局文件预 览框宽度得到扫描框图像在旋转后的相机图像中的宽度,根据预设的布局文件扫描框高 度、相机图像的宽度和布局文件预览框高度得到扫描框图像在旋转后的相机图像中的高 度。
[0054]其中,扫描框图像在旋转后的相机图像中的左顶点的横坐标为布局文件扫描框左 顶点横坐标乘以相机图像的高度再除以布局文件预览框宽度;扫描框图像在旋转后的相机 图像中的左顶点的纵坐标为布局文件扫描框左顶点纵坐标乘以相机图像的宽度再除以布 局文件预览框高度;扫描框图像在旋转后的相机图像中的宽度为预设的布局文件扫描框宽 度乘以相机图像的高度再除以布局文件预览框宽度;扫描框图像在旋转后的相机图像中的 高度为预设的布局文件扫描框高度乘以相机图像的宽度再除以布局文件预览框高度。
[0055] 本实施例中,应用通过系统相机的相机预览框获取相机图像,具体为:应用设置系 统相机的自动对焦回调和预览回调,应用通过系统相机的相机预览框获取相机图像。
[0056] 其中,设置系统相机的自动对焦回调和预览回调,包括:
[0057] 步骤S7-1:应用创建系统自动对焦回调类的自动对焦回调对象,根据创建的自动 对焦回调对象设置系统相机的自动对焦回调;
[0058] 步骤S7-2:应用创建系统预览回调类对象;
[0059] 步骤S7-3:应用根据创建的预览回调类对象和相机对象,设置系统相机的预览回 调。
[0060] 本实施例中,根据旋转后的相机图像的位置及扫描框图像在旋转后的相机图像中 的位置,在旋转后的相机图像中获取与扫描框对应的扫描框图像具体为:应用根据旋转后 的相机图像的宽高、扫描框图像在旋转后的相机图像中的左顶点的坐标和扫描框图像在旋 转后的相机图像中的宽高,在旋转后的相机图像中获取与扫描框对应的扫描框图像。本实 施例中,将相机图像进行旋转具体为:应用将相机图像顺时针旋转90度。
[0061] 本实施例提供的一种扫描二维码的方法,仅对与相机预览框中的扫描框对应的包 括二维码图像的扫描框图像进行解析,不需要对扫描框之外的其他图像进行解析,提高解 码效率。进一步地,应用通过获取当前屏幕的分辨率,在系统相机支持的预览图尺寸中获取 与当前屏幕的分辨率最接近的值作为系统相机的相机分辨率,根据相机分辨率设置相机图 像,可以使相机图像与相机预览框更匹配,进而使扫描框图像与扫描框更匹配,从而保证应 用能够在获取到完整的二维码图像的同时最大限度的减少扫描框图像中的二维码图像之 外的冗余数据,并且还可以避免了因系统相机的相机分辨率过高而造成获取到的相机图像 的数据过大,进而因在旋转后的相机图像中获取到的扫描框图像的数据过大而降低解码的 效率。另外,应用根据当前应用父布局、扫描框布局和相机图像,计算扫描框图像在旋转后 相机图像中的位置,能够更精确地确定扫描框图像在旋转后的相机图像中的位置,提高在 旋转后的相机图像中获取与扫描框对应的扫描框图像的速度,进一步的提高解码的效率。 [0062] 实施例2
[0063] 本发明的实施例2提供了一种扫描二维码的方法,如图2和图3所示,包括:
[0064] 步骤101:应用根据预设的当前应用父布局的对象ID获取当前应用父布局的对象, 根据预设的扫描框布局的对象ID获取扫描框布局的对象,根据预设的界面视图控件ID,获 取界面视图类的控件,即界面视图对象;
[0065] 具体地,应用根据预设的当前应用父布局的对象ID,调用系统方法findViewByld 方法获取当前应用父布局的对象mContainer;根据预设的扫描框布局的对象ID,调用系统 方法;^11(1¥16¥871(1方法获取扫描框布局的对象111〇(^1^7〇111: ;根据预设的界面视图 SurfaceView控件ID,调用系统方法findviewViewByld方法获取界面视图SurfaceView类的 控件,获取到的控件即为界面视图surfaceView对象;
[0066] 步骤102:应用通过界面视图对象获取界面视图类的控件的界面控制器;
[0067] 具体地,应用通过界面视图surfaceView对象调用系统方法getHolder方法获取界 面视图SurfaceView类的控件的界面控制器surfaceHolder;
[0068] 步骤103:应用创建界面控制器类的对象,并根据创建的界面控制器类的对象设置 界面控制器的回调;
[0069] 具体地,应用创建界面控制器SurfaceHolder. Cal lback类的对象,并将其作为参 数,调用界面控制器surfaceholder中的addCal lback方法设置界面控制器的回调;
[0070] 需说明的是,界面控制器SurfaceHolder.Callback类的对象中包括 surf aceCreated方法,当应用将界面控制器Surf aceHolder ? Cal lback类的对象作为参数, 调用界面控制器surfaceholder中的addCal lback方法设置界面控制器的回调后;应用会通 过系统的surfaceCreated方法接收到来自系统的通知。
[0071 ] 步骤104:当应用通过系统的surfaceCreated方法接收到来自系统的通知后,应用 创建相机对象;
[0072] 具体地,当应用通过系统的surf aceCreated方法接收到来自系统的参数 Surf aceHolder holder后,应用判定通过系统的surfaceCreated方法接收到来自系统的通 知,应用调用系统Camera类的open方法创建相机对象camera;
[0073] 步骤105:应用判断相机对象是否为空,是则结束,否则执行步骤106;
[0074] 步骤106:应用根据创建的相机对象和获取到的界面控制器,设置系统相机的实时 预览显示;
[0075] 具体地,应用将获取到的界面控制器surfaceHolder作为参数,调用相机对象 camera的setPreviewDisplay方法,设置系统相机的实时预览显示;
[0076]步骤107:应用根据创建的相机对象,获取当前相机参数对象;
[0077] 具体地,应用调用相机对象camera的getParameters方法,获取该方法返回的 Camera. Parameters类的对象作为当前相机参数对象parameters;
[0078]步骤108:应用根据系统提供的窗口服务,获取当前应用的窗体管理器对象;
[0079]具体地,系统提供的窗口服务为Context. WIND0W_SERVICE,应用将系统提供的窗 口服务作为参数,调用系统方法getSystemService获取当前应用的WindowManager类对象 作为窗体管理器对象;
[0080] 步骤109:应用根据获取到的窗体管理器对象,创建窗体显示类的对象;
[0081 ] 具体地,应用调用获取到的窗体管理器对象中的getDefaultDisplay方法,仓I」建窗 体显示Display类的对象display;
[0082]步骤110:应用根据创建的窗体显示类的对象,获取当前屏幕的分辨率;
[0083]具体地,应用将当前屏幕的分辨率对象screenResolution作为参数,调用窗体显 示Display类的对象display的getSize方法获取当前屏幕的分辨率,并将获取到的当前屏 幕的分辨率赋值给当前屏幕的分辨率screenResolution;
[0084]例如,当前屏幕的分辨率为1184x768;
[0085]步骤111:应用判断当前屏幕的分辨率对象中的属性x的值是否小于属性y的值,是 则执行步骤112,否则执行步骤113;
[0086] 例如,当前屏幕的分辨率对象8沈66111^8〇1111:;[011中属性1的值为1184,当前屏幕的 分辨率对象S c r e e n R e S 0 1 u t i 0 n中属性y的值7 6 8,则当前屏幕的分辨率对象 screenResolution中的属性x的值不小于属性y的值;
[0087] 步骤112:应用将当前屏幕的分辨率对象中的属性x的值与属性y的值进行交换,执 行步骤113,
[0088] 步骤113:应用根据第一预设字符串和当前相机参数对象,获取当前相机支持的预 览图尺寸;
[0089] 具体地,第一预设字符串为preview-size-values,应用将第一字符串作为参数, 调用当前相机参数对象parameters的get方法获取当前相机支持的预览图尺寸 previewSizeValueString;
[0090] 例如,当前相机支持的预览图尺寸previewSizeValueString为:1280x960, 1280x720,800x480,720x480,640x480,576x432,480x320,384x288,352x288,320x240, 240x160,176x144;
[0091]步骤114:应用在当前相机支持的预览图尺寸中获取与当前屏幕的分辨率对象最 接近的值作为相机分辨率;
[0092]例如,得到的相机分辨率为1280x720;
[0093]步骤115:应用根据相机分辨率,设置当前相机参数对象中的相机图像的宽高; [0094]具体地,应用将相机分辨率作为参数,调用当前相机参数对象parameters的 setPreviewSize方法,设置当前相机参数对象parameters中的相机图像的宽高;
[0095] 例如,当前相机参数对象parameters中的相机图像的宽高为1280x720;
[0096] 步骤116:应用根据预设角度,设置当前相机参数对象中的预览图显示的方向;
[0097] 具体地,预设角度为90,应用将预设角度作为参数,调用当前相机参数对象 parameters的setDisplayOrientat ion方法,设置当前相机参数对象parameters中的预览 图显示的方向;
[0098] 步骤117:应用根据上述设置完成的当前相机参数对象中的相机图像的宽高和预 览图显示的方向,设置系统相机的相机参数;
[00"] 具体地,应用将当前相机参数对象parameters作为参数,调用相机对象camera的 setParameters设置系统相机的相机参数;
[0100]步骤118:应用根据当前应用父布局的对象、扫描框布局的对象和相机图像的宽 高,计算扫描框图像在相机图像中的左顶点的坐标和扫描框图像的宽高;
[01 01 ]步骤119:应用根据相机对象,启动相机预览框;
[01 02 ] 具体地,应用调用相机对象camera的s tar tPre v i ew方法启动相机预览框;
[0103] 步骤120:应用创建系统自动对焦回调类的自动对焦回调对象,根据创建的自动对 焦回调对象设置系统相机的自动对焦回调;
[0104] 具体地,应用将创建的自动对焦回调对象autoFocusCallback作为参数,调用相机 对象camera的autoFocus方法为系统相机设置自动对焦回调;
[0105] 需说明的是,自动对焦回调对象autoFocusCallback中包括onAutoFocus方法,当 应用将创建的自动对焦回调对象autoFocusCallback作为参数,调用相机对象camera的 autoFocus方法为系统相机设置自动对焦回调后,应用会通过系统的onAutoFocus方法接收 到来自系统的通知。
[0106]步骤121:当应用通过系统的onAutoFocus方法接收到来自系统的通知后,应用创 建系统预览回调类对象;
[0107]具体地,当应用通过系统的onAutoFocus方法接收到来自系统的参数success,和 camera后,应用判定通过系统的onAutoFocus方法接收到来自系统的通知,应用创建系统预 览回调类 PreviewCal lback 类的对象 previewCal lback;
[0108] 步骤122:应用根据创建的预览回调类对象和相机对象,设置系统相机的预览回 调;
[0109] 具体地,应用将创建的预览回调类PreviewCal lback的对象previewCal lback作为 参数,调用相机对象camera的setOneShotPreviewCallback方法为系统相机设置预览回调; [0110] 需说明的是,预览回调类对象previewCal lback中包括onPreviewFrame方法,当应 用将创建的预览回调类PreviewCal lback的对象previewCal lback作为参数,调用相机对象 camera的setOneShotPreviewCallback方法为系统相机设置预览回调后,应用会通过系统 的onPreviewFrame方法接收到来自系统的通知。
[0111 ] 步骤123:当应用通过系统的onPreviewFrame方法接收到来自系统的通知后,应用 从onPr e v i e wFr ame方法的参数中获取相机图像;
[0112] 具体地,当应用通过系统的onPreviewFrame方法接收到来自系统的参数data和 earner后,应用判定通过系统的onPreviewFrame方法接收到来自系统的通知,应用从 onPr e v i ewFrame方法的参数data中获取相机图像。
[0113]本实施例中,图像均以数据的形式存在。
[0114]例如,应用获取到的相机图像数据data为:
[0116] 步骤124:应用将获取到的相机图像进行旋转,根据相机图像的宽高得到旋转后的 相机图像的宽高;
[0117] 具体地,应用将获取到的相机图像顺时针旋转90度,将相机图像的宽高相互交换 作为旋转后的相机图像的宽高;
[0118] 更加具体地,应用按照预设方法对获取到的相机图像的数据进行转换,使相机图 像顺时针旋转90度,并使相机图像的宽高相互交换作为旋转后的相机图像的宽高。
[0119] 其中,预设方法可以具体为:
[0120] for (int. y 二 0; y〈..height; y++) { for (int x = 0; x < width; x++) r〇.tatc.dI)at:a[x .承 height + ..height - y - 1] .= data[.x + y 氺 width];
[0121] },其中,height为旋转前的相机图像的高(720),width为旋转前的相机图像的宽 (1280); data为旋转前的相机图像的数据,rotatedData为旋转后的相机图像的数据。
[0122] 例如,转换后的相机图像的数据为:
[0124] 其中,相机图像的宽高为1280x720,旋转后的相机图像的宽高为720x1280;
[0125] 步骤125:应用根据旋转后的相机图像的宽高、扫描框图像在相机图像中的左顶点 的坐标和扫描框图像的宽高,在旋转后的相机图像中获取与扫描框对应的扫描框图像,对 获取到的扫描框图像进行解码;
[0126] 具体地,应用根据旋转后的相机图像的宽高、布尔值常量true、扫描框图像的左顶 点横坐标x、扫描框图像在相机图像中的左顶点纵坐标y和扫描框图像的宽高,在旋转后的 相机图像中获取与扫描框对应的扫描框图像,对获取到的扫描框图像进行解码;
[0127] 例如,旋转后的相机图像的宽为720,旋转后的相机图像的高为1280,扫描框图像 的左顶点横坐标x为172,扫描框图像的左顶点纵坐标y为225,扫描框图像的宽为187,扫描 框图像的高为225;
[0128]更加具体地,应用使用旋转后的相机图像的宽高、布尔值常量true、扫描框图像的 左顶点横坐标x、扫描框图像在相机图像中的左顶点纵坐标y和扫描框图像的宽高,调用系 统方法在旋转后的相机图像中获取与扫描框对应的扫描框图像,对获取到的扫描框图像进 行解码。
[0129] 本步骤中,系统方法包括但不限于:zbar_image_set_crop()。
[0130] 步骤126:应用判断解码是否成功,是则确定扫描二维码成功,结束,否则返回步骤 120;
[0131] 本实施例中,步骤114中应用在当前相机支持的预览图尺寸中获取与当前屏幕的 分辨率对象最接近的值作为相机分辨率,如图4所示,具体为:
[0132] 步骤A01:应用初始化相机分辨率横坐标、相机分辨率纵坐标和第一差值;
[0133] 例如,相机分辨率横坐标和相机分辨率纵坐标的初始值均为0,第一差值的初始值 为第一预设值 Integer .MAX_VALUE;例如,第一预设值 Integer .MAX_VALUE 为 3354191829;
[0134] 步骤A02:应用根据第二预设字符串,获取模板类的对象;
[0135] 具体地,第二预设字符串为",",应用将第二预设字符串作为参数,调用 Pattern, compile方法获取模板Pattern类的对象,即模板Pattern类的对象为",";
[0136] 步骤A03:应用根据获取到的模板类的对象,将当前相机支持的预览图尺寸分割为 预览图尺寸字符串数组;
[0137] 具体地,应用将当前相机支持的预览图尺寸 调用模板P a 11 e r n类的对象的s p 1 i t方法,将当前相机支持的预览图尺寸 previewSizeValueString分割成预览图尺寸字符串数组;
[0138] 例如,当前相机支持的预览图尺寸previewSizeValueString为:1280x960, 1280x720,800x480,720x480,640x480,576x432,480x320,384x288,352x288,320x240, 240x160,176x144,分割得到的预览图尺寸字符串数组为: 1280x960 1280x720 800x480 720x480 640x480 576x432
[0139] 480x320 384x288 352x288 320x240 240x160 176x144
[0140] 步骤A04:应用初始化计数器;
[0141] 例如,计数器的初始值为0;
[0142] 步骤A05:应用判断计数器的值是否大于预览图尺寸字符串数组中的数据个数,是 则执行步骤A13,否则执行步骤A06;
[0143] 例如,预览图尺寸字符串数组中的数据个数为12;
[0144] 步骤A06:应用在预览图尺寸字符串数组中获取与计数器的值对应的预览图尺寸 字符串,即当前预览图尺寸;
[0145] 具体地,应用在预览图尺寸字符串数组中获取与计数器的值对应的预览图尺寸字 符串,仓ll建字符串String类的对象,即当前预览图尺寸对象previewSize;
[0146] 步骤A07:应用获取第三预设字符串在当前预览图尺寸对象中的位置作为分割位 置;
[0147] 具体地,第三预设字符串为"X",应用将第三预设字符串作为参数,调用当前预览 图尺寸对象previewSize的indexOf方法,获取第三预设字符串在当前预览图尺寸对象 previewSize 中的分割位置 dimPosition;
[0148] 例如,当前预览图尺寸对象previewView为1280x960,获取到的分割位置 dimPosition为4;
[0149] 步骤A08:应用在当前预览图尺寸对象中获取分割位置及分割位置之前的数据,根 据获取到的数据更新相机分辨率横坐标,应用在当前预览图尺寸对象中获取分割位置之后 的数据,根据获取到的数据更新相机分辨率纵坐标;
[0150] 具体地,应用将0和分割位置dimPosition作为参数,调用当前预览图尺寸对象 previewSize的substring方法获取0到分割位置dimPosition上的字符串,并将获取到的字 符串作为参数调用Integer.parselnt方法,得到int型的数据,并根据得到的数据更新相机 分辨率横坐标newX;
[0151] 具体地,应用将分割位置dimPosition加1作为参数,调用当前预览图尺寸对象 previewSize的substring方法获取分割位置dimPosition之后的字符串,并将获取到的字 符串作为参数调用Integer.parselnt方法,得到int型的数据,并根据得到的数据更新相机 分辨率纵坐标newY;
[0152] 例如,更新后的相机分辨率横坐标newX为1280,更新后的相机分辨率纵坐标newY 为960;
[0153] 步骤A09:应用对相机分辨率横坐标、相机分辨率纵坐标和当前屏幕的分辨率对象 进行计算,得到当前差值;
[0154] 具体地,应用将相机分辨率横坐标n e w X与当前屏幕的分辨率对象 8(^66111^8〇1111:;[011中的属性1的差作为参数,调用1&11:11.3&8方法计算两者之间差值的绝对 值,将相机分辨率纵坐标newY与当前屏幕的分辨率对象screenResolution中的属性y的差 作为参数,调用Math. abs方法计算两者之间差值的绝对值,将两次计算得到的绝对值求和, 得到当前差值newDiff;
[0155] 例如,相机分辨率横坐标newX为1280,相机分辨率纵坐标newY为960,当前屏幕的 分辨率对象screenResolution中属性x的值为1184,当前屏幕的分辨率对象 8(^66111^8〇1111:;[011中属性7的值768 ;相机分辨率横坐标116¥乂与当前屏幕的分辨率对象 8(^66111^801111:;[011中属性1的值的差值的绝对值是96,相机分辨率纵坐标116¥¥与当前屏幕 的分辨率对象screenResolution中属性y的值的差值的绝对值是192,两次计算得到的绝对 值求和,得到的当前差值newDif f为288;
[0156] 步骤A10:应用判断当前差值是否为0,是则执行步骤A12,否则执行步骤All;
[0157] 步骤All:应用判断当前差值是否小于第一差值,是则根据当前差值更新第一差 值,更新计数器,返回步骤A05;否则更新计数器,返回步骤A05;
[0158] 例如,当前差值newDiff为288,第一差值为3354191829,则当前差值小于第一差 值,将第一差值更新为288;
[0159] 步骤A12:应用判断相机分辨率横坐标和相机分辨率纵坐标是否均大于0,是则执 行步骤A13,否则结束;
[0160] 步骤A13:应用以相机分辨率横坐标和相机分辨率纵坐标作为参数,创建系统坐标 点类的对象作为相机分辨率;
[0161] 本实施例中,步骤118中应用根据当前应用父布局的对象、扫描框布局的对象和相 机图像的宽高,计算扫描框图像在相机图像中的左顶点的坐标和扫描框图像的宽高,具体 为:
[0162] 步骤B01:应用获取扫描框布局的对象左侧与当前应用父布局的对象左侧之间的 距离作为布局文件扫描框左顶点横坐标,获取扫描框布局的对象顶部与当前应用父布局的 对象顶部之间的距离作为布局文件扫描框左顶点纵坐标,获取预览框布局的对象的宽度作 为布局文件预览框宽度;获取预览框布局的对象的高度作为布局文件预览框高度;
[0163] 具体地,应用调用扫描框布局的对象mCropLayout的getLeft方法,获取扫描框布 局的对象mCropLayout左侧与当前应用父布局的对象mContainer之间的距离,即布局文件 扫描框左顶点横坐标x;调用扫描框布局的对象mCropLayout的getTop方法,获取扫描框布 局的对象mCropLayout顶部与当前应用父布局的对象mContainer之间的距离,即布局文件 扫描框左顶点纵坐标y;调用预览框布局的对象mContainer的getWidth方法,获取预览框布 局的对象mContainer的宽度,即布局文件预览框宽度;调用预览框布局的对象mContainer 象的getHeight方法,获取预览框布局的对象mContainer的高度,即布局文件预览框高度;
[0164] 例如,布局文件扫描框左顶点横坐标x为184,布局文件扫描框左顶点纵坐标y为 200,布局文件预览框宽度为768,布局文件预览框高度为1134;
[0165] 本实施例中,布局文件预览框与相机的预览框对应,布局文件扫描框与相机的预 览框中的扫描框对应。
[0166] 需说明的是,布局文件扫描框左顶点的坐标还可以是预设的。
[0167] 步骤B02:应用根据布局文件扫描框左顶点横坐标、布局文件预览框宽度和相机图 像的高度得到扫描框图像在相机图像中的左顶点的横坐标,根据布局文件扫描框左顶点纵 坐标、布局文件预览框高度和相机图像的宽度得到扫描框图像在相机图像中的左顶点的纵 坐标,根据预设的布局文件扫描框宽度、相机图像的高度和布局文件预览框宽度得到扫描 框图像在相机图像中的宽度,根据预设的布局文件预览框高度、相机图像的宽度和布局文 件扫描框高度得到扫描框图像在相机图像中的高度;
[0168] 例如,布局文件扫描框左顶点横坐标x为184,布局文件扫描框左顶点纵坐标y为 200,布局文件扫描框宽度为768,布局文件扫描框高度为1134,相机图像的高度为720,相机 图像的宽度为1280,预设的布局文件扫描框宽度和高度均为200;
[0169] 扫描框图像的左顶点的横坐标x为布局文件扫描框左顶点横坐标x乘以相机图像 的高度再除以布局文件预览框宽度,即(184*720)/768得到扫描框图像在相机图像中的左 顶点的横坐标x为172;
[0170] 扫描框图像的左顶点的纵坐标y为布局文件扫描框左顶点纵坐标y乘以相机图像 的宽度再除以布局文件预览框高度,即(200*1280)/1134得到扫描框图像在相机图像中的 左顶点的纵坐标y为225;
[0171] 扫描框图像的宽度为预设的布局文件扫描框宽度乘以相机图像的高度再除以布 局文件预览框宽度,即(200*720)/768得到扫描框图像在相机图像中的宽度为187;
[0172] 扫描框图像的高度为预设的布局文件扫描框高度乘以相机图像的宽度再除以布 局文件预览框高度,即(200*1280)/1134得到扫描框图像在相机图像中的高度为225。
[0173] 本实施例中提供的一种扫描二维码的方法,能够根据获得的扫描框图像在相机图 像中的坐标和扫描框图像的宽高,从相机图像中获取到扫描框图像,在对相机的预览框中 的相机图像进行解析时,仅对与扫描框对应的包括有二维码图像的扫描框图像进行解析, 不需要对扫描框之外的其他图像进行解析,提高解码效率。
[0174] 实施例3
[0175] 本实施例提供了一种扫描二维码的装置,如图5所示,包括:启动模块01、第一获取 模块02和解码模块03;
[0176]启动模块01,用于启动系统相机;
[0177] 其中,启动模块01包括界面控制子模块、第一创建子模块、第一启动子模块和第五 获取子模块;
[0178] 界面控制子模块,用于设置界面控制器的回调;
[0179] 第一创建子模块,用于界面控制子模块设置界面控制器的回调后,创建相机对象;
[0180] 第五获取子模块,用于根据第一创建子模块创建的相机对象,获取当前相机参数; [0181 ]第一启动子模块,用于根据第一创建子模块创建的相机对象,启动系统相机的相 机预览框。
[0182] 第一获取模块02,用于当启动模块01启动系统相机后,通过系统相机的相机预览 框获取相机图像,将相机图像进行旋转,根据旋转后的相机图像及与扫描框图像在旋转后 的相机图像中,在旋转后的相机图像中获取与扫描框对应的扫描框图像;
[0183] 解码模块03,用于对第一获取模块02获取到的扫描框图像进行解码。
[0184] 本实施例中,装置还可以包括判断模块,判断模块用于当启动模块01启动系统相 机之前,判断系统相机是否存在;相应地,启动模块01具体用于当判断模块判定为是后,启 动系统相机。
[0185] 本实施例中,装置还可以包括:第二获取模块;第二获取模块包括第一获取子模 块、第二获取子模块和第一设置子模块;
[0186] 第一获取子模块用于当第一获取模块02将相机图像进行旋转之前,获取当前屏幕 的分辨率;第二获取子模块用于在系统相机支持的预览图尺寸中获取与第一获取子模块获 取到的当前屏幕的分辨率最接近的值作为相机分辨率;第一设置子模块用于根据第二获取 子模块获取到的相机分辨率设置相机图像。
[0187] 其中,第一获取子模块包括:第一获取单元、第一创建单元、第二获取单元和第二 判断单元;
[0188] 第一获取单元,用于根据系统提供的窗口服务,获取当前应用的窗体管理器对象;
[0189] 第一创建单元,用于根据第一获取单元获取到的窗体管理器对象,创建窗体显示 类的对象;
[0190] 第二获取单元,用于根据第一创建单元创建的窗体显示类的对象,获取当前屏幕 的分辨率;
[0191] 第二判断单元,用于判断第二获取单元获取到的当前屏幕的分辨率中的属性x的 值是否小于属性y的值,是则将当前屏幕的分辨率中的属性x的值与属性y的值进行交换,确 定获取到当前屏幕的分辨率,否则确定获取到当前屏幕的分辨率。
[0192] 其中,第二获取子模块包括:初始化单元、第三获取单元、第一分割单元、第三判断 单元、第二创建单元、第四获取单元、第一更新单元、第一计算单元、第四判断单元、第五判 断单元、第六判断单元和第三创建单元;
[0193] 初始化单元,用于初始化相机分辨率横坐标、相机分辨率纵坐标、第一差值和计数 器;
[0194] 第三获取单元,用于根据第二预设字符串,获取模板类的对象;
[0195] 第一分割单元,用于根据第三获取单元获取到的模板类的对象,将当前相机支持 的预览图尺寸分割为预览图尺寸字符串数组;
[0196] 第三判断单元,用于判断计数器的值是否大于预览图尺寸字符串数组中的数据个 数;
[0197] 第二创建单元,用于当第三判断单元判断计数器的值不大于预览图尺寸字符串数 组中的数据个数时,在预览图尺寸字符串数组中获取与计数器的值对应的预览图尺寸字符 串,即当前预览图尺寸;
[0198] 第四获取单元,用于获取第三预设字符串在第二创建单元得到的当前预览图尺寸 中的位置作为分割位置;
[0199] 第一更新单元,用于在第二创建单元得到的当前预览图尺寸中获取分割位置及分 割位置之前的数据,根据获取到的数据更新相机分辨率横坐标,应用在当前预览图尺寸中 获取分割位置之后的数据,根据获取到的数据更新相机分辨率纵坐标;
[0200] 第一计算单元,用于对第一更新单元得到的相机分辨率横坐标、相机分辨率纵坐 标和当前屏幕的分辨率进行计算,得到当前差值;
[0201] 第四判断单元,用于判断当前差值是否为0;
[0202] 第五判断单元,用于当第四判断单元判断出当前差值不为0时,判断当前差值是否 小于第一差值,是则根据当前差值更新第一差值,更新计数器,触发第三判断单元进行工 作;否则更新计数器,触发第三判断单元进行工作;
[0203] 第六判断单元,用于当第四判断单元判断出当前差值为0时,判断相机分辨率横坐 标和相机分辨率纵坐标是否均大于〇;
[0204]第三创建单元,用于当第三判断单元判断出计数器的值大于预览图尺寸字符串数 组中的数据个数,或者第六判断单元判断出相机分辨率横坐标和相机分辨率纵坐标均大于 0时,以相机分辨率横坐标和相机分辨率纵坐标作为参数,仓ll建系统坐标点类的对象作为相 机分辨率。
[0205] 进一步地,第一计算单元,具体用于计算相机分辨率横坐标与当前屏幕的分辨率 中的属性X的绝对值,计算相机分辨率纵坐标与当前屏幕的分辨率中的属性y的绝对值,将 两次计算得到的绝对值求和,得到当前差值。
[0206] 本实施例中,装置还可以包括:第一计算模块;
[0207]第一计算模块用于在第一获取模块02根据旋转后的相机图像及扫描框图像在旋 转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框图像之前, 根据当前应用父布局、扫描框布局和相机图像,计算扫描框图像在旋转后的相机图像中的 位置。
[0208] 第一计算模块包括:第五获取单元和第二计算单元;
[0209] 第五获取单元,用于获取扫描框布局的左侧与当前应用父布局的左侧之间的距离 作为布局文件扫描框左顶点横坐标,获取扫描框布局的顶部与当前应用父布局的顶部之间 的距离作为布局文件扫描框左顶点纵坐标,获取预览框布局的宽度作为布局文件预览框宽 度;获取预览框布局的高度作为布局文件预览框高度;
[0210] 第二计算单元,用于根据第五获取单元获取到的布局文件扫描框左顶点横坐标、 布局文件预览框宽度和相机图像的高度得到扫描框图像在旋转后的相机图像中的左顶点 的横坐标,根据第五获取单元获取到的布局文件扫描框左顶点纵坐标、布局文件预览框高 度和相机图像的宽度得到扫描框图像在旋转后的相机图像中的左顶点的纵坐标,根据预设 的布局文件扫描框宽度、相机图像的高度和第五获取单元获取到的布局文件预览框宽度得 到扫描框图像在旋转后的相机图像中的宽度,根据预设的布局文件扫描框高度、相机图像 的宽度和第五获取单元获取到的布局文件预览框高度得到扫描框图像在旋转后的相机图 像中的高度。
[0211] 进一步地,第二计算单元,具体用于将布局文件扫描框左顶点横坐标乘以相机图 像的高度再除以布局文件预览框宽度,得到扫描框图像在旋转后的相机图像中的左顶点的 横坐标;将布局文件扫描框左顶点纵坐标乘以相机图像的宽度再除以布局文件预览框高 度,得到扫描框图像在旋转后的相机图像中的左顶点的纵坐标;将预设的布局文件扫描框 宽度乘以相机图像的高度再除以布局文件预览框宽度,得到扫描框图像在旋转后的相机图 像中的宽度;将预设的布局文件扫描框高度乘以相机图像的宽度再除以布局文件预览框高 度,得到扫描框图像在旋转后的相机图像中的高度。
[0212]本实施例中,第一获取模块02可以包括第三获取子模块、第一旋转子模块和第四 获取子模块;
[0213]第三获取子模块用于当启动模块01启动系统相机后,设置系统相机的自动对焦回 调和预览回调;通过系统相机的相机预览框获取相机图像;
[0214] 第一旋转子模块用于将第三获取子模块获取到的相机图像进行旋转;
[0215] 第四获取子模块,用于根据系统相机的相机分辨率和相机预览框中的扫描框位 置,在旋转后的相机图像中获取与扫描框对应的扫描框图像。
[0216] 进一步地,第三获取子模块包括:第一设置单元、第四创建单元、第二设置单元和 第六获取单元;
[0217] 第一设置单元,用于当启动模块01启动系统相机后,创建系统自动对焦回调类的 自动对焦回调对象,根据创建的自动对焦回调对象设置系统相机的自动对焦回调;
[0218] 第四创建单元,用于当第一设置单元设置系统相机的自动对焦回调后,创建系统 预览回调类对象;
[0219] 第二设置单元,用于根据第四创建单元创建的预览回调类对象和相机对象,设置 系统相机的预览回调;
[0220] 第六获取单元,用于当第二设置单元设置系统相机的预览回调后,通过系统相机 的相机预览框获取相机图像。
[0221]本实施例中,第一获取模块02可以具体用于当启动模块01启动系统相机后,通过 系统相机的相机预览框获取相机图像,将相机图像进行旋转,根据旋转后的相机图像的宽 高、扫描框图像在旋转后的相机图像中的左顶点的坐标和扫描框图像在旋转后的相机图像 中的宽高,在旋转后的相机图像中获取与扫描框对应的扫描框图像。
[0222]本实施例中,第一获取模块02还可以具体用于当启动模块01启动系统相机后,通 过系统相机的相机预览框获取相机图像,将相机图像顺时针旋转90度,根据旋转后的相机 图像及扫描框图像在旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对 应的扫描框图像。
[0223]本实施例中,解码模块03,具体用于对第一获取模块02获取到的扫描框图像的数 据进行解码,判断解码是否成功,是则确定扫描二维码成功;相应地,第一获取模块02还用 于当解码模块03判定为否后,通过系统相机的相机预览框获取相机图像,将相机图像进行 旋转,根据旋转后的相机图像及扫描框图像在旋转后的相机图像中的位置,在旋转后的相 机图像中获取与扫描框对应的扫描框图像。
[0224] 本实施例中提供的一种扫描二维码的装置,能够根据获得的扫描框图像在旋转后 的相机图像中的坐标和扫描框图像的宽高,从相机的图像中获取到与扫描框对应的扫描框 图像,在对相机的预览框中的图像进行解析时,仅对与扫描框对应的包括有二维码图像的 扫描框图像进行解析,不需要对扫描框之外的其他图像进行解析,提高解码效率。
[0225] 以上,仅为本发明较佳的【具体实施方式】,但本发明的保护范围并不局限于此,任何 熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应 涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
【主权项】
1. 一种扫描二维码的方法,其特征在于,包括: 步骤SI:应用启动系统相机; 步骤S2:所述应用通过所述系统相机的相机预览框获取相机图像,将所述相机图像进 行旋转,根据旋转后的相机图像及扫描框图像在所述旋转后的相机图像中的位置,在旋转 后的相机图像中获取与扫描框对应的扫描框图像; 步骤S3:所述应用对获取到的扫描框图像进行解码。2. 根据权利要求1所述的方法,其特征在于,所述启动系统相机之前包括:所述应用判 断系统相机是否存在,如果是,则启动所述系统相机,执行步骤S2;否则,结束。3. 根据权利要求1所述的方法,其特征在于,所述将所述相机图像进行旋转之前,还包 括:所述应用获取当前屏幕的分辨率,在所述系统相机支持的预览图尺寸中获取与当前屏 幕的分辨率最接近的值作为所述系统相机的相机分辨率,根据所述相机分辨率设置所述相 机图像。4. 根据权利要求3所述的方法,其特征在于,所述获取当前屏幕的分辨率,包括: 步骤S4-1:所述应用根据所述系统提供的窗口服务,获取当前应用的窗体管理器对象; 步骤S4-2:所述应用根据获取到的所述窗体管理器对象,创建窗体显示类的对象; 步骤S4-3:所述应用根据创建的所述窗体显示类的对象,获取当前屏幕的分辨率; 步骤S4-4:所述应用判断当前屏幕的分辨率中的属性X的值是否小于属性y的值,是则 将当前屏幕的分辨率中的属性X的值与属性y的值进行交换,确定获取到当前屏幕的分辨 率,否则确定获取到当前屏幕的分辨率。5. 根据权利要求3所述的方法,其特征在于,所述在所述系统相机支持的预览图尺寸中 获取与当前屏幕的分辨率最接近的值作为相机分辨率,包括: 步骤AO1:所述应用初始化相机分辨率横坐标、相机分辨率纵坐标、第一差值和计数器; 步骤A02:所述应用根据第二预设字符串,获取模板类的对象; 步骤A03:所述应用根据获取到的模板类的对象,将当前相机支持的预览图尺寸分割为 预览图尺寸字符串数组; 步骤A04:所述应用判断计数器的值是否大于预览图尺寸字符串数组中的数据个数,是 则执行步骤A12,否则执行步骤A05; 步骤A05:所述应用在预览图尺寸字符串数组中获取与计数器的值对应的预览图尺寸 字符串,即当前预览图尺寸; 步骤A06:所述应用获取第三预设字符串在当前预览图尺寸中的位置作为分割位置; 步骤A07:所述应用在当前预览图尺寸中获取分割位置及分割位置之前的数据,根据获 取到的数据更新相机分辨率横坐标,应用在当前预览图尺寸中获取分割位置之后的数据, 根据获取到的数据更新相机分辨率纵坐标; 步骤A08:所述应用对相机分辨率横坐标、相机分辨率纵坐标和当前屏幕的分辨率进行 计算,得到当前差值; 步骤A09:所述应用判断当前差值是否为0,是则执行步骤Al 1,否则执行步骤AlO; 步骤A10:所述应用判断当前差值是否小于第一差值,是则根据当前差值更新第一差 值,更新计数器,返回步骤A04;否则更新计数器,返回步骤A04; 步骤All:所述应用判断相机分辨率横坐标和相机分辨率纵坐标是否均大于0,是则执 行步骤A12,否则结束; 步骤A12:所述应用以相机分辨率横坐标和相机分辨率纵坐标作为参数,创建系统坐标 点类的对象作为相机分辨率。6. 根据权利要求5所述的方法,其特征在于,所述步骤A09具体为:所述应用计算相机分 辨率横坐标与当前屏幕的分辨率中的属性X的差值的绝对值,计算相机分辨率纵坐标与当 前屏幕的分辨率中的属性y的差值的绝对值,将两次计算得到的绝对值求和,得到当前差 值。7. 根据权利要求1所述的方法,其特征在于,所述根据旋转后的相机图像及扫描框图像 在所述旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框图 像之前,还包括:所述应用根据当前应用父布局、扫描框布局和相机图像,计算扫描框图像 在所述旋转后的相机图像中的位置。8. 根据权利要求7所述的方法,其特征在于,所述应用根据当前应用父布局、扫描框布 局和相机图像,计算扫描框图像在所述旋转后的相机图像中的位置,包括: 步骤BOl:应用获取扫描框布局的左侧与当前应用父布局的左侧之间的距离作为布局 文件扫描框左顶点横坐标,获取扫描框布局的顶部与当前应用父布局的顶部之间的距离作 为布局文件扫描框左顶点纵坐标,获取预览框布局的宽度作为布局文件预览框宽度;获取 预览框布局的高度作为布局文件预览框高度; 步骤B02:应用根据布局文件扫描框左顶点横坐标、布局文件预览框宽度和相机图像的 高度得到扫描框图像在所述旋转后的相机图像中的左顶点的横坐标,根据布局文件扫描框 左顶点纵坐标、布局文件预览框高度和相机图像的宽度得到扫描框图像在所述旋转后的相 机图像中的左顶点的纵坐标,根据预设的布局文件扫描框宽度、相机图像的高度和布局文 件预览框宽度得到扫描框图像在所述旋转后的相机图像中的宽度,根据预设的布局文件扫 描框高度、相机图像的宽度和布局文件预览框高度得到扫描框图像在所述旋转后的相机图 像中的高度。9. 根据权利要求8所述的方法,其特征在于,所述扫描框图像在所述旋转后的相机图像 中的左顶点的横坐标为布局文件扫描框左顶点横坐标乘以相机图像的高度再除以布局文 件预览框宽度; 所述扫描框图像在所述旋转后的相机图像中的左顶点的纵坐标为布局文件扫描框左 顶点纵坐标乘以相机图像的宽度再除以布局文件预览框高度; 所述扫描框图像在所述旋转后的相机图像中的宽度为预设的布局文件扫描框宽度乘 以相机图像的高度再除以布局文件预览框宽度; 所述扫描框图像在所述旋转后的相机图像中的高度为预设的布局文件扫描框高度乘 以相机图像的宽度再除以布局文件预览框高度。10. 根据权利要求1所述的方法,其特征在于,所述应用通过所述系统相机的相机预览 框获取相机图像,具体为:所述应用设置系统相机的自动对焦回调和预览回调,应用通过所 述系统相机的相机预览框获取相机图像。11. 根据权利要求10所述的方法,其特征在于,所述设置系统相机的自动对焦回调和预 览回调,包括: 步骤S7-1:应用创建系统自动对焦回调类的自动对焦回调对象,根据创建的自动对焦 回调对象设置系统相机的自动对焦回调; 步骤S7-2:应用创建系统预览回调类对象; 步骤S7-3:应用根据创建的预览回调类对象和相机对象,设置系统相机的预览回调。12. 根据权利要求1所述的方法,其特征在于,所述根据旋转后的相机图像及扫描框图 像在所述旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框 图像具体为:所述应用根据旋转后的相机图像的宽高、所述扫描框图像在所述旋转后的相 机图像中的左顶点的坐标和所述扫描框图像在所述旋转后的相机图像中的宽高,在旋转后 的相机图像中获取与扫描框对应的扫描框图像。13. 根据权利要求1所述的方法,其特征在于,所述步骤Sl具体包括: 所述应用设置界面控制器的回调,所述应用创建相机对象; 所述应用根据创建的所述相机对象,获取当前相机参数; 所述应用根据所述相机对象,启动系统相机的相机预览框。14. 根据权利要求1所述的方法,其特征在于,所述将所述相机图像进行旋转具体为:所 述应用将所述相机图像顺时针旋转90度。15. 根据权利要求1所述的方法,其特征在于,所述步骤S3具体包括: 所述应用对获取到的扫描框图像的数据进行解码,判断解码是否成功,是则确定扫描 二维码成功,结束,否则返回步骤S2。16. -种扫描二维码的装置,其特征在于,包括:启动模块、第一获取模块和解码模块; 所述启动模块,用于启动系统相机; 所述第一获取模块,用于当所述启动模块启动所述系统相机后,通过所述系统相机的 相机预览框获取相机图像,将所述相机图像进行旋转,根据旋转后的相机图像及扫描框图 像在所述旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框 图像; 所述解码模块,用于对所述第一获取模块获取到的扫描框图像进行解码。17. 根据权利要求16所述的装置,其特征在于,还包括判断模块,所述判断模块用于当 所述启动模块启动系统相机之前,判断系统相机是否存在; 所述启动模块具体用于当所述判断模块判定为是后,启动系统相机。18. 根据权利要求16所述的装置,其特征在于,还包括:第二获取模块;所述第二获取模 块包括第一获取子模块、第二获取子模块和第一设置子模块; 所述第一获取子模块用于当所述第一获取模块将所述相机图像进行旋转之前,获取当 前屏幕的分辨率; 所述第二获取子模块用于在所述系统相机支持的预览图尺寸中获取与所述第一获取 子模块获取到的当前屏幕的分辨率最接近的值作为相机分辨率; 所述第一设置子模块用于根据所述第二获取子模块获取到的所述相机分辨率设置相 机图像。19. 根据权利要求18所述的装置,其特征在于,所述第一获取子模块包括:第一获取单 元、第一创建单元、第二获取单元和第二判断单元; 所述第一获取单元,用于根据所述系统提供的窗口服务,获取当前应用的窗体管理器 对象; 所述第一创建单元,用于根据所述第一获取单元获取到的所述窗体管理器对象,创建 窗体显示类的对象; 所述第二获取单元,用于根据所述第一创建单元创建的所述窗体显示类的对象,获取 当前屏幕的分辨率; 所述第二判断单元,用于判断所述第二获取单元获取到的当前屏幕的分辨率中的属性 X的值是否小于属性y的值,是则将当前屏幕的分辨率中的属性X的值与属性y的值进行交 换,确定获取到当前屏幕的分辨率,否则确定获取到当前屏幕的分辨率。20. 根据权利要求18所述的装置,其特征在于,所述第二获取子模块包括:初始化单元、 第三获取单元、第一分割单元、第三判断单元、第二创建单元、第四获取单元、第一更新单 元、第一计算单元、第四判断单元、第五判断单元、第六判断单元和第三创建单元; 所述初始化单元,用于初始化相机分辨率横坐标、相机分辨率纵坐标、第一差值和计数 器; 所述第三获取单元,用于根据第二预设字符串,获取模板类的对象; 所述第一分割单元,用于根据所述第三获取单元获取到的模板类的对象,将当前相机 支持的预览图尺寸分割为预览图尺寸字符串数组; 所述第三判断单元,用于判断计数器的值是否大于预览图尺寸字符串数组中的数据个 数; 所述第二创建单元,用于当所述第三判断单元判断计数器的值不大于预览图尺寸字符 串数组中的数据个数时,在预览图尺寸字符串数组中获取与计数器的值对应的预览图尺寸 字符串,即当前预览图尺寸; 所述第四获取单元,用于获取第三预设字符串在所述第二创建单元得到的当前预览图 尺寸中的位置作为分割位置; 所述第一更新单元,用于在所述第二创建单元得到的当前预览图尺寸中获取分割位置 及分割位置之前的数据,根据获取到的数据更新相机分辨率横坐标,应用在当前预览图尺 寸中获取分割位置之后的数据,根据获取到的数据更新相机分辨率纵坐标; 所述第一计算单元,用于对所述第一更新单元得到的相机分辨率横坐标、相机分辨率 纵坐标和当前屏幕的分辨率进行计算,得到当前差值; 所述第四判断单元,用于判断当前差值是否为〇; 所述第五判断单元,用于当所述第四判断单元判断出当前差值不为0时,判断当前差值 是否小于第一差值,是则根据当前差值更新第一差值,更新计数器,触发所述第三判断单元 进行工作;否则更新计数器,触发所述第三判断单元进行工作; 所述第六判断单元,用于当所述第四判断单元判断出当前差值为〇时,判断相机分辨率 横坐标和相机分辨率纵坐标是否均大于〇; 所述第三创建单元,用于当所述第三判断单元判断出计数器的值大于预览图尺寸字符 串数组中的数据个数,或者所述第六判断单元判断出相机分辨率横坐标和相机分辨率纵坐 标均大于〇时,以相机分辨率横坐标和相机分辨率纵坐标作为参数,创建系统坐标点类的对 象作为相机分辨率。21. 根据权利要求20所述的装置,其特征在于,所述第一计算单元,具体用于计算相机 分辨率横坐标与当前屏幕的分辨率中的属性X的绝对值,计算相机分辨率纵坐标与当前屏 幕的分辨率中的属性y的绝对值,将两次计算得到的绝对值求和,得到当前差值。22. 根据权利要求16所述的装置,其特征在于,还包括:第一计算模块; 所述第一计算模块用于在所述第一获取模块根据旋转后的相机图像及扫描框图像在 所述旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框图像 之前,根据当前应用父布局、扫描框布局和相机图像,计算扫描框图像在所述旋转后的相机 图像中的位置。23. 根据权利要求22所述的装置,其特征在于,所述第一计算模块包括:第五获取单元 和第二计算单元; 所述第五获取单元,用于获取扫描框布局的左侧与当前应用父布局的左侧之间的距离 作为布局文件扫描框左顶点横坐标,获取扫描框布局的顶部与当前应用父布局的顶部之间 的距离作为布局文件扫描框左顶点纵坐标,获取预览框布局的宽度作为布局文件预览框宽 度;获取预览框布局的高度作为布局文件预览框高度; 所述第二计算单元,用于根据所述第五获取单元获取到的布局文件扫描框左顶点横坐 标、布局文件预览框宽度和相机图像的高度得到扫描框图像在所述旋转后的相机图像中的 左顶点的横坐标,根据所述第五获取单元获取到的布局文件扫描框左顶点纵坐标、布局文 件预览框高度和相机图像的宽度得到扫描框图像在所述旋转后的相机图像中的左顶点的 纵坐标,根据预设的布局文件扫描框宽度、相机图像的高度和所述第五获取单元获取到的 布局文件预览框宽度得到扫描框图像在所述旋转后的相机图像中的宽度,根据预设的布局 文件扫描框高度、相机图像的宽度和所述第五获取单元获取到的布局文件预览框高度得到 扫描框图像在所述旋转后的相机图像中的高度。24. 根据权利要求23所述的装置,其特征在于,所述第二计算单元,具体用于将布局文 件扫描框左顶点横坐标乘以相机图像的高度再除以布局文件预览框宽度,得到所述扫描框 图像在所述旋转后的相机图像中的左顶点的横坐标;将布局文件扫描框左顶点纵坐标乘以 相机图像的宽度再除以布局文件预览框高度,得到所述扫描框图像在所述旋转后的相机图 像中的左顶点的纵坐标;将预设的布局文件扫描框宽度乘以相机图像的高度再除以布局文 件预览框宽度,得到所述扫描框图像在所述旋转后的相机图像中的宽度;将预设的布局文 件扫描框高度乘以相机图像的宽度再除以布局文件预览框高度,得到所述扫描框图像在所 述旋转后的相机图像中的高度。25. 根据权利要求16所述的装置,其特征在于,所述第一获取模块包括第三获取子模 块、第一旋转子模块和第四获取子模块; 所述第三获取子模块用于当所述启动模块启动所述系统相机后,设置系统相机的自动 对焦回调和预览回调;通过所述系统相机的相机预览框获取相机图像; 所述第一旋转子模块用于将所述第三获取子模块获取到的相机图像进行旋转; 所述第四获取子模块,用于根据所述系统相机的相机分辨率和所述相机预览框中的扫 描框位置,在旋转后的相机图像中获取与扫描框对应的扫描框图像。26. 根据权利要求25所述的装置,其特征在于,所述第三获取子模块包括:第一设置单 元、第四创建单元、第二设置单元和第六获取单元; 所述第一设置单元,用于当所述启动模块启动所述系统相机后,创建系统自动对焦回 调类的自动对焦回调对象,根据创建的自动对焦回调对象设置系统相机的自动对焦回调; 所述第四创建单元,用于当所述第一设置单元设置系统相机的自动对焦回调后,创建 系统预览回调类对象; 所述第二设置单元,用于根据所述第四创建单元创建的预览回调类对象和相机对象, 设置系统相机的预览回调; 所述第六获取单元,用于当所述第二设置单元设置系统相机的预览回调后,通过所述 系统相机的相机预览框获取相机图像。27. 根据权利要求16所述的装置,其特征在于,所述第一获取模块具体用于当所述启动 模块启动所述系统相机后,通过所述系统相机的相机预览框获取相机图像,将所述相机图 像进行旋转,根据旋转后的相机图像的宽高、所述扫描框图像在所述旋转后的相机图像中 的左顶点的坐标和所述扫描框图像在所述旋转后的相机图像中的宽高,在旋转后的相机图 像中获取与扫描框对应的扫描框图像。28. 根据权利要求16所述的装置,其特征在于,所述启动模块包括界面控制子模块、第 一创建子模块、第一启动子模块和第五获取子模块; 所述界面控制子模块,用于设置界面控制器的回调; 所述第一创建子模块,用于所述界面控制子模块设置界面控制器的回调后,创建相机 对象; 所述第五获取子模块,用于根据所述第一创建子模块创建的所述相机对象,获取当前 相机参数; 所述第一启动子模块,用于根据所述第一创建子模块创建的所述相机对象,启动系统 相机的相机预览框。29. 根据权利要求16所述的装置,其特征在于,所述第一获取模块具体用于当所述启动 模块启动所述系统相机后,通过所述系统相机的相机预览框获取相机图像,将所述相机图 像顺时针旋转90度,根据旋转后的相机图像及扫描框图像在所述旋转后的相机图像中的位 置,在旋转后的相机图像中获取与扫描框对应的扫描框图像。30. 根据权利要求16所述的装置,其特征在于,所述解码模块,具体用于对所述第一获 取模块获取到的扫描框图像的数据进行解码,判断解码是否成功,是则确定扫描二维码成 功; 所述第一获取模块还用于当所述解码模块判定为否后,通过所述系统相机的相机预览 框获取相机图像,将所述相机图像进行旋转,根据旋转后的相机图像及扫描框图像在所述 旋转后的相机图像中的位置,在旋转后的相机图像中获取与扫描框对应的扫描框图像。
【文档编号】G06K7/14GK105930757SQ201610244863
【公开日】2016年9月7日
【申请日】2016年4月19日
【发明人】陆舟, 于华章
【申请人】飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1