我一直在研究一个旧项目,其中包含过时的Zxing库版本,需要更新以修复reverse image bug on the Nexus 5x。我设法更新了库,但只支持portrait mode。
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);
}
我现在面临解码Nexus 5X设备上条形码的问题,我们的EAN-13条形码似乎在旋转,如下图所示。
Nexus 5X
Android 6.0设备
答案 0 :(得分:2)
这是一个已知问题,即reported on the tracker。
状态:未修复(预期行为)
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,你就不应该看到这种行为。