chentao0707 / SimplifyReader

一款基于Google Material Design设计开发的Android客户端,包括新闻简读,图片浏览,视频爽看 ,音乐轻听以及二维码扫描五个子模块。项目采取的是MVP架构开发,由于还是摸索阶段,可能不是很规范。但基本上应该是这么个套路,至少我个人认为是这样的~恩,就是这样的!
Apache License 2.0
4.58k stars 1.61k forks source link

Nexus 5x扫码的蛋疼问题 #53

Open xiaozhi003 opened 8 years ago

xiaozhi003 commented 8 years ago

最近买了5x,可是他的照相问题确实蛋疼啊。首先扫码预览图是倒着的,这个查看官方文档设置setDisplayOrientation可以迅速兼容起来。原本以为这样就开开心心解决了,但是总是事与愿违PreviewCallback返回的数据确实是横屏,但是横屏的方向也与其他种类的手机相反,别人返回的是头朝左,5x返回的是头朝右;也就是说我把data翻转过来5x的图像与预览的图像是反着的;这样导致你扫码的时候明明把二维码放到了框中却解析不了。

目前我自己解决办法: 因为不知道是5x或者6p手机的原因还是api 23的问题,那么我目前为止是判断是否是5x,并且在decodeCrop方法中传入的top坐标为cameraHieght - mCropRect.top - mCropRect.height(),这样可以顺利解决;

其实以上方式不大好,感觉正确的应该是根据data来判断orientation;当然目前没有找到对byte直接返回orientation的方法或者开源的项目;本人去zxing项目翻了好几页的issue也只是找到了解决5x预览正确;

可能有人会说先把data转成Bitmap然后对方向进行调整(因为我们可以对Bitmap的方向做调整),然后扫码解析的时候再把Bitmap转成data,我不知道这样行不行,但至少效率太低;

不知道 @SkillCollege 有什么好的办法

xiaozhi003 commented 8 years ago

灵感来的太快,已解决;有不懂的可以详情:)

chentao0707 commented 8 years ago

@xiaozhi003 为什么不继续写下你的灵感呢?

xiaozhi003 commented 8 years ago

:) 首先调整摄像头预览方向,有两种方案: 1.去zxing源码下拷贝CameraConfigurationManager.java替换之;zxing的作者已经解决了预览方向的问题; 2.去android官网地址http://developer.android.com/reference/android/hardware/Camera.html 找到setDisplayOrientation方法的描述加入这一段调整预览方向;(ps:打不开的同学还是去你下载的sdk的doc文件里找,或者只能翻墙了;当然也是时候整个vpn了,哈哈) 建议用官方的方式;

调整图片数据的方向: 我们知道虽然我们把预览调整了可是返回的数据还是横着的,于是我们有了对数据转置的方式来调整;但是对于不同手机转置方式也是不同,主要是根据setDisplayOrientation你设置了多少,通常我们会设置90但是nexus5x设置为270才能预览正常;也就是上面对于预览的兼容代码,我们可以通过上面的方式记录下来orientation,然后对数据转置进行不同的处理: if (orientation == 90) { for (int y = 0; y < size.height; y++) { for (int x = 0; x < size.width; x++) rotatedData[x * size.height + size.height - y - 1] = data[x

再此还是那句老话:开源万岁。。。:)

llitfkitfk commented 8 years ago

亲测, 条形码扫描正常