android竖屏时zxing 二维码 竖屏扫描怎么解决屏幕出现拉伸

android zxing扫描二维码设置为竖屏问题
[问题点数:40分]
android zxing扫描二维码设置为竖屏问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。> 二维码扫描(横屏、竖屏、解决竖屏后拉伸有关问题、美化扫描框)
二维码扫描(横屏、竖屏、解决竖屏后拉伸有关问题、美化扫描框)
ljling1122 & &
发布时间: & &
浏览:10 & &
回复:0 & &
悬赏:0.0希赛币
二维码扫描(横屏、竖屏、解决竖屏后拉伸问题、美化扫描框)  以前上传过一个源码:Android二维码扫描简单源码
  是根据zxing的源码进行简化的,不过只支持横屏。
  其实支持竖屏也挺简单的:
  Step 1: Add following lines to rotate data before&buildLuminanceSource(..)&in&decode(byte[]
data, int width, int height)
  DecodeHandler.java:
  byte[] rotatedData = new byte[data.length];
for (int y = 0; y & y++) {
for (int x = 0; x & x++)
rotatedData[x * height + height - y - 1] = data[x + y * width];
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
  Step 2: Modify&getFramingRectInPreview().
  CameraManager.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;
  Step 3: Disable the check for Landscape Mode in&initFromCameraParameters(...)
  CameraConfigurationManager.java
  //remove the following
if (width & height) {
Log.i(TAG, &Display reports
assuming this is incorrect&);
int temp =
  Step 4: Add following line to rotate camera insetDesiredCameraParameters(...)
  CameraConfigurationManager.java
  camera.setDisplayOrientation(90);
  Step 5: Do not forget to set orientation of activity to portrait. I.e: manifest
但是这样之后,会出现拉伸的问题,解决方法如下:
  更改CameraConfigurationManager.java文件
在 Log.d(TAG, &Screen resolution: & + screenResolution);这句之后增加
Point screenResolutionForCamera = new Point();
& && &&&screenResolutionForCamera.x = screenResolution.x;
& && &&&screenResolutionForCamera.y = screenResolution.y;
& && &&&// preview size is always something like 480*320, other 320*480
& && &&&if (screenResolution.x & screenResolution.y) {
& && &&&screenResolutionForCamera.x = screenResolution.y;
& && &&&screenResolutionForCamera.y = screenResolution.x;
再更改cameraResolution = getCameraResolution(parameters, screenResolution);为cameraResolution = getCameraResolution(parameters, screenResolutionForCamera);
  如果想美化一下取景框,可以参看代码:
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&zxing横竖屏问题完美解决,显示无拉伸
zxing横竖屏问题完美解决,显示无拉伸
在zxing开发中camera除了用到上述接口外还有一些参数设置 Camera.Parameters,这里主要在CameraConfigurationManagerw完成的,由于google源码zxing是横屏的,他在获取屏幕的时候在竖屏的时候自动转换为横屏,代码如下:if (width & height) {& && && && & int temp =& && && && &&&width =& && && && &&&height =& && && &}
boolean isCandidatePortrait = realWidth & realH int maybeFlippedWidth = isCandidatePortrait ? realHeight : realW int maybeFlippedHeight = isCandidatePortrait ? realWidth : realH所以在更改横竖屏的时候这段代码很重要,很多人都在DecodeHandler中添加 byte[] rotatedData = new byte[data.length];& & for (int y = 0; y & y++) {& && &&&for (int x = 0; x & x++)& && && && &rotatedData[x * height + height - y - 1] = data[x + y * width];& & }& & int tmp = & & width =& & height =data = rotatedD这个就把获取到的横屏数据转为竖屏的,但这个有点繁琐,如果更改上述代码同时也要更改CameraManager中的 & && &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;& && &framingRectInPreview =& & }这样才可以转换为竖屏,不过这样改动有一个很突出的问题,哪就是在竖屏的时候看到的二维码的高被拉伸了,这就是我说的之前google源码中把竖屏也强制转换为横屏留下的,最好的解决方案就是把CameraConfiguration中的获取窗口大小的代码 screenResolution = new Point(width,height);中的width与height调换,这样我们就获取竖屏的窗口,也可以保证横竖屏转换后看到的二维码看着不被拉伸,当然后面的代码都不用变,在setDesiredCameraParameters(Camera camera, boolean safeMode)中添加 camera.setDisplayOrientation(90);和把Manifest中CaptureActivity的设置android:screenOrientation=”landscape”即可,这样我们就完成了横竖屏的完美转换。
发表评论:
TA的最新馆藏504 Gateway Timeout二维码扫描(横屏、竖屏、解决竖屏后拉伸有关问题、美化扫描框) - 移动开发当前位置:& &&&二维码扫描(横屏、竖屏、解决竖屏后拉伸有关问题、二维码扫描(横屏、竖屏、解决竖屏后拉伸有关问题、美化扫描框)&&网友分享于:&&浏览:269次二维码扫描(横屏、竖屏、解决竖屏后拉伸问题、美化扫描框)以前上传过一个源码:Android二维码扫描简单源码
是根据zxing的源码进行简化的,不过只支持横屏。
其实支持竖屏也挺简单的:【/questions//zxing-camera-in-portrait-mode-on-android】
Step 1: Add following lines to rotate data before&buildLuminanceSource(..)&in&decode(byte[]
data, int width, int height)
DecodeHandler.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;
width = height;
height = tmp;
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
Step 2: Modify&getFramingRectInPreview().
CameraManager.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;
Step 3: Disable the check for Landscape Mode in&initFromCameraParameters(...)
CameraConfigurationManager.java
//remove the following
if (width & height) {
Log.i(TAG, &Display reports
assuming this is incorrect&);
int temp = width;
width = height;
height = temp;
Step 4: Add following line to rotate camera insetDesiredCameraParameters(...)
CameraConfigurationManager.java
camera.setDisplayOrientation(90);
Step 5: Do not forget to set orientation of activity to portrait. I.e: manifest
但是这样之后,会出现拉伸的问题,解决方法如下:
更改CameraConfigurationManager.java文件
在 Log.d(TAG, &Screen resolution: & + screenResolution);这句之后增加
Point screenResolutionForCamera = new Point();
& && &&&screenResolutionForCamera.x = screenResolution.x;
& && &&&screenResolutionForCamera.y = screenResolution.y;
& && &&&// preview size is always something like 480*320, other 320*480
& && &&&if (screenResolution.x & screenResolution.y) {
& && &&&screenResolutionForCamera.x = screenResolution.y;
& && &&&screenResolutionForCamera.y = screenResolution.x;
再更改cameraResolution = getCameraResolution(parameters, screenResolution);为cameraResolution = getCameraResolution(parameters, screenResolutionForCamera);
如果想美化一下取景框,可以参看代码:https://code.csdn.net/snippets/64838
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 二维码识别扫描器 的文章

 

随机推荐