添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

安卓相机的预览尺寸和图片尺寸有什么区别?

5 人关注

在一个使用相机的应用程序中,我需要显示相机的预览,我可以通过获取所有支持的预览尺寸来设置预览尺寸,并找到最佳尺寸。我是否也应该为相机设置最佳图片尺寸?如果是这样,预览尺寸和图片尺寸之间的区别是什么?

而目前我使用下面的方法来寻找最佳预览尺寸

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;

使用这种方法在某些手机上会产生错误的预览尺寸。谁能建议一个更好的逻辑来获得最佳预览尺寸?

android
camera
android-camera
arjun
arjun
发布于 2017-02-08
2 个回答
Lalit Jadav
Lalit Jadav
发布于 2017-09-14
已采纳
0 人赞同

图片大小 这是当你告诉相机拍摄照片时产生的图像的大小。如果它与原始分辨率的长宽比相同,那么它将被直接缩放。如果长宽比不同,那么它将从原始尺寸中裁剪出来。根据我的经验,getSupportedPictureSizes返回的最大尺寸是相机的原始分辨率。

预览尺寸 这是屏幕上显示的图像预览的尺寸。它可能与原始尺寸或图片尺寸的长宽比不同,导致进一步裁剪。

为了使你在屏幕上看到的图像与你拍照时产生的图像最接近,试着选择一个长宽比尽可能接近你选择的图片尺寸的预览尺寸。我一般会尽量使两者都接近原始尺寸。

请同时检查 this link

Nasser Tahani
Nasser Tahani
发布于 2017-09-14
0 人赞同

拉利特解释了图片尺寸和相机上的预览尺寸之间的区别。你可以尝试这个方法,以获得与设备的屏幕尺寸相关的最理想的尺寸。

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);