Camera2 Api、Size object、getHeight 方法 returns 宽度和 getWidth returns 高度

Camera2 Api, Size object, getHeight method returns width and getWidth returns height

正如我在标题中所说,这对我来说没有任何意义。应该 return 宽度 returns 1920 的方法,以及应该 return 高度 returns 1080 的方法。我做错了什么吗?

我的相机 activity 被锁定在纵向模式。我的 phone 是三星 Note 4。由于我的 phone 处于纵向模式并锁定在那个方向,所以我的高度应该是 1920,宽度应该是 1080,但是当我没有锁定我的相机时 activity在纵向模式下,还是return错误的值,但是当它变成横向模式时,高度是1080,宽度是1920。

我的代码:

mPreviewSize = 
chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), rotatedWidth, 
rotatedHeight);

private static Size chooseOptimalSize(Size[] choices, int width, int 
height) {
    List<Size> bigEnough = new ArrayList<Size>();
    for(Size option : choices) {
        Log.d("detectivepikachu","option: h: "+option.getHeight()+" w: 
"+option.getWidth());

        if(option.getHeight() == option.getWidth() * height / width &&
                option.getWidth() >= width && option.getHeight() >= 
height) {
            bigEnough.add(option);
        }
    }
    if(bigEnough.size() > 0) {
        return Collections.min(bigEnough, new CompareSizeByArea());
    } else {
        return choices[0];
    }

}

您可以旋转纹理,但相机硬件即使在纵向模式下仍会生成相同的图像。有关详细信息,请参阅

如果您使用 MediaRecorder 制作视频,或使用 ImageReader 即时捕获预览图像,它们也会到达由相机硬件决定的方向。为了适合您的设备方向,您必须明确旋转它们。