首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android摄像头的预览大小和图片大小有什么不同

android摄像头的预览大小和图片大小有什么不同
EN

Stack Overflow用户
提问于 2017-02-08 13:01:51
回答 2查看 5.7K关注 0票数 5

在使用摄像头的应用程序中,我需要显示摄像头的预览,我可以通过获取所有支持的预览大小来设置预览大小,并找到最佳的预览大小。我是否也应该为相机设置最佳图片大小?如果有,预览大小和图片大小有什么不同?

目前,我使用下面的方法找到最佳预览大小

代码语言:javascript
运行
复制
int minDiff = Integer.MAX_VALUE;
for (SizePair sizePair : validPreviewSizes) {
  Size size = sizePair.previewSize();
  int diff =
      Math.abs(size.getWidth() - desiredWidth) + Math.abs(size.getHeight() - desiredHeight);
  if (diff < minDiff) {
    selectedPair = sizePair;
    minDiff = diff;
  }
}

使用此方法会在某些手机中显示错误的预览大小。有没有人能提出一个更好的逻辑来获得最佳的预览大小?

EN

回答 2

Stack Overflow用户

发布于 2017-02-08 13:11:54

图片大小这是告诉相机拍照时生成的图像的大小。如果它与原始分辨率的纵横比相同,则将直接从该分辨率缩放。如果纵横比不同,则将从原始大小裁剪。根据我的经验,getSupportedPictureSizes返回的最大尺寸是摄像头的本机分辨率。

预览大小这是在屏幕上显示的图像预览的大小。它的纵横比可能与原始大小或图片大小不同,从而导致进一步裁剪

若要在屏幕上看到的内容与拍摄照片时生成的图像之间获得最接近的匹配,请尝试选择宽高比与所选图片大小的宽高比尽可能接近的预览大小。我通常会尽量使两者的大小接近原生大小。

请同时查看this link

票数 11
EN

Stack Overflow用户

发布于 2017-09-14 14:45:19

Lalit解释了照片大小和相机预览大小之间的差异。您可以尝试此方法来获得与设备屏幕大小相关的最佳大小。

代码语言:javascript
运行
复制
private Camera.Size getOptimalSize(Camera.Parameters params, int w, int h) {

    final double ASPECT_TH = .2; // Threshold between camera supported ratio and screen ratio.
    double minDiff = Double.MAX_VALUE; //  Threshold of difference between screen height and camera supported height.
    double targetRatio = 0;
    int targetHeight = h;
    double ratio;
    Camera.Size optimalSize = null;

    // check if the orientation is portrait or landscape to change aspect ratio.
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        targetRatio = (double) h / (double) w;
    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        targetRatio = (double) w / (double) h;
    }

    // loop through all supported preview sizes to set best display ratio.
    for (Camera.Size s : params.getSupportedPreviewSizes()) {

        ratio = (double) s.width / (double) s.height;
        if (Math.abs(ratio - targetRatio) <= ASPECT_TH) {

            if (Math.abs(targetHeight - s.height) < minDiff) {
                optimalSize = s;
                minDiff = Math.abs(targetHeight - s.height);
            }
        }
    }
    return optimalSize;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42105087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档