我一直在研究一个过时的Zxing库版本的旧项目,需要更新以修复Nexus 5x上的反向图像错误.我设法更新了库,但只支持纵向模式.
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
source = activity.getCameraManager().buildLuminanceSource(data,
width, height);
} else {
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;
data = rotatedData;
source = activity.getCameraManager().buildLuminanceSource(data,
width, height);
}
Run Code Online (Sandbox Code Playgroud)
我现在面临着在我们的Nexus 5X设备上解码条形码的问题,我们的EAN-13条形码似乎在旋转,如下图所示.
Nexus 5X
Android 6.0设备
这是一个已知问题,已在跟踪器上报告。
状态:无法修复(预期行为)
Nexus 5X 的主摄像头具有不寻常的方向 - 根据 Android 兼容性要求,传感器长边必须与设备的长边对齐,这意味着传感器面向横向或反向横向。大多数 Android 设备都有横向传感器,但 5X 是反向横向传感器。
由于大多数设备都是相同的,因此许多应用程序无法正确检查传感器方向并应用正确的调整。如果您或多或少地将示例代码复制粘贴到此处:
http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
对于旧的相机 API,它应该为所有类型的设备(手机和平板电脑)、传感器方向和相机朝向(正面或背面)设置正确的方向。
正如您所指出的,还必须设置 JPEG 方向,但这一直是一项要求,因此很少有应用程序会出现此错误(因为即使 UI 是强制横向的,手机也经常以随机方向握持)。
此处,camera2 API 故意更加用户友好 - 如果您使用 SurfaceView,该 API 可确保预览方向正确。不幸的是,我们无法修复旧的 API 来为您执行此操作。
基本上,如果您使用Camera2 API,您不应该看到这种行为。
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |