Android Camera2 Api,Size对象,getHeight方法返回宽度,getWidth返回高度

Android Camera2 Api,Size对象,getHeight方法返回宽度,getWidth返回高度,android,android-camera,android-camera2,Android,Android Camera,Android Camera2,正如我在标题中所说,这对我来说没有任何意义。应该返回宽度的方法返回1920,应该返回高度的方法返回1080。我做错什么了吗 我的相机活动在纵向模式下被锁定。我的手机是三星Note4。由于我的手机处于纵向模式并锁定在该方向,因此我的高度应为1920,宽度应为1080,但是当我没有在纵向模式下锁定相机活动时,它仍然返回错误的值,但当它转到横向模式时,高度为1080,宽度为1920 我的代码: mPreviewSize = chooseOptimalSize(map.getOutputSizes(S

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

我的相机活动在纵向模式下被锁定。我的手机是三星Note4。由于我的手机处于纵向模式并锁定在该方向,因此我的高度应为1920,宽度应为1080,但是当我没有在纵向模式下锁定相机活动时,它仍然返回错误的值,但当它转到横向模式时,高度为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];
    }

}
mPreviewSize=
选择最佳大小(map.getOutputSizes(SurfaceTexture.class)),旋转宽度,
旋转高度);
私有静态大小选择最优大小(大小[]选项,整数宽度,整数
高度){
List bigtough=new ArrayList();
用于(大小选项:选项){
Log.d(“detectivepikachu”,“option:h:”+option.getHeight()+“w:
“+option.getWidth());
如果(option.getHeight()==option.getWidth()*高度/宽度&&
option.getWidth()>=宽度和option.getHeight()>=
高度){
足够大。添加(选项);
}
}
如果(足够大。大小()>0){
return Collections.min(足够大,新的comparesizebyrea());
}否则{
返回选项[0];
}
}

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


如果您使用MediaRecorder制作视频,或使用ImageReader动态捕获预览图像,它们也将到达相机硬件指定的方向。要适应设备方向,您必须明确旋转它们。

相机方向可能不同检查Exif数据以获取方向信息,您可能需要旋转图像。