Android Zxing 转换竖屏扫描且提高识别率的方法,android zxing使用

6
回复
1217
查看
[复制链接]

503

主题

1199

帖子

2026

安币

手工艺人

发表于 2018-5-28 18:24:34 | 显示全部楼层 |阅读模式

            

        最近的一个android需要用到扫码功能,用的是zxing开源库。zxing的集成就不说了,但是zxing默认的是横屏扫码,在实际生产中并不适用,需要改为竖屏扫描。

        转竖屏步骤:

        1>. androidmanifest.xml中把activity标签captureactivity部分的screenorientation改为portrait。

[Java] 查看源文件 复制代码
android:screenorientation="portrait"

        2>. cameramanager类中的getframingrectinpreview()方法,将left, right, top, bottom改变。

[Java] 查看源文件 复制代码
//竖屏
rect.left = rect.left * cameraresolution.y / screenresolution.x;
rect.right = rect.right * cameraresolution.y / screenresolution.x;
rect.top = rect.top * cameraresolution.x / screenresolution.y;
rect.bottom = rect.bottom * cameraresolution.x / screenresolution.y;

        3>. cameraconfigurationmanager类中的setdesiredcameraparameters(opencamera camera, boolean safemode)方法,在setparameters之前添加

[Java] 查看源文件 复制代码
thecamera.setdisplayorientation(90);

        4>. decodehandler类中的decode(byte[] data, int width, int height)方法,在planaryuvluminancesource source = activity.getcameramanager().buildluminancesource(data, width, height)之前添加

[Java] 查看源文件 复制代码
byte[] rotateddata = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
  rotateddata[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width; // here we are swapping, that's the difference to #11
width = height;
height = tmp;
data = rotateddata;

        此时,竖屏扫描已经可以实现了,但是扫描复杂的图码时,分辨率低的已经分不清纹理了,很难识别出来,所以需要优化识别率。

        识别率优化:

        1>. cameraconfigurationutils类中的findbestpreviewsizevalue(camera.parameters parameters, point screenresolution)方法,将double screenaspectratio = screenresolution.x / (double) screenresolution.y改为

[Java] 查看源文件 复制代码
double screenaspectratio;
if (screenresolution.x > screenresolution.y) {
  screenaspectratio = (double) screenresolution.x / (double) screenresolution.y;
} else {
  screenaspectratio = (double) screenresolution.y / (double) screenresolution.x;
}

        2>. 至此,识别率已经很大程度上的提高了,若在要提高识别率,可通过修改cameramanager类中的max_frame_width和max_frame_height来提高精度。






        

497

主题

1244

帖子

1029

安币

手工艺人

发表于 2018-5-28 21:01:06 | 显示全部楼层
支持,感谢,祝巴士越来越好~

0

主题

9453

帖子

2399

安币

Android大神

Rank: 6Rank: 6

发表于 2018-5-29 00:59:53 | 显示全部楼层
每次我都积极回帖的,想要安币~

429

主题

1163

帖子

1894

安币

手工艺人

发表于 2018-5-29 05:26:17 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

11

主题

9475

帖子

969

安币

代码手工艺人

Rank: 4

发表于 2018-5-29 09:00:51 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~

4

主题

9735

帖子

790

安币

代码手工艺人

Rank: 4

发表于 2018-5-29 13:25:36 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

14

主题

9481

帖子

4722

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2018-5-29 16:46:28 | 显示全部楼层
不错不错,楼主辛苦了。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )