在Nexus 5x上以纵向反转图像

时间:2017-04-28 09:55:54

标签: android zxing

我一直在研究一个旧项目,其中包含过时的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

Nexus 5X

Android 6.0设备

Android 6.0 device

1 个答案:

答案 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,你就不应该看到这种行为。