【问题标题】:Camera2 Api, Size object, getHeight method returns width and getWidth returns heightCamera2 Api,Size对象,getHeight方法返回宽度,getWidth返回高度
【发布时间】:2019-02-05 15:51:14
【问题描述】:

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

我的相机活动被锁定为纵向模式。我的手机是三星 Note 4。由于我的手机处于纵向模式并锁定在该方向,我的高度应该是 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];
    }

}

【问题讨论】:

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

标签: android android-camera android-camera2


【解决方案1】:

您可以旋转纹理,但即使在纵向模式下,相机硬件仍会生成相同的图像。请参阅 Why camera2 supported preview size width always bigger than height? 了解更多详情。

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

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2014-03-02
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多