Android Camera Size Get getOptimalPreviewSize( List sizes, int w, int h)

Here you can find the source of getOptimalPreviewSize( List sizes, int w, int h)

Description

Iterate over supported camera preview sizes to see which one best fits the dimensions of the given view while maintaining the aspect ratio.

Parameter

Parameter Description
sizes Supported camera preview sizes.
w The width of the view.
h The height of the view.

Return

Best match camera preview size to fit in the view.

Declaration

public static Camera.Size getOptimalPreviewSize(
        List<Camera.Size> sizes, int w, int h) 

Method Source Code

//package com.java2s;

import java.util.List;

import android.hardware.Camera;

public class Main {
    /**/* w ww  .  ja v a  2 s . co m*/
     * Iterate over supported camera preview sizes to see which one best fits the dimensions of the given view while maintaining the aspect ratio. If none can, be lenient with the
     * aspect ratio.
     * 
     * @param sizes
     *            Supported camera preview sizes.
     * @param w
     *            The width of the view.
     * @param h
     *            The height of the view.
     * @return Best match camera preview size to fit in the view.
     */
    public static Camera.Size getOptimalPreviewSize(
            List<Camera.Size> sizes, int w, int h) {
        // Use a very small tolerance because we want an exact match.
        final double ASPECT_TOLERANCE = 0.1;
        double targetRatio = (double) w / h;
        if (sizes == null)
            return null;

        Camera.Size optimalSize = null;

        // Start with max value and refine as we iterate over available preview sizes. This is the
        // minimum difference between view and camera height.
        double minDiff = Double.MAX_VALUE;

        // Target view height
        int targetHeight = h;

        // Try to find a preview size that matches aspect ratio and the target view size.
        // Iterate over all available sizes and pick the largest size that can fit in the view and
        // still maintain the aspect ratio.
        for (Camera.Size size : sizes) {
            double ratio = (double) size.width / size.height;
            if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
                continue;
            if (Math.abs(size.height - targetHeight) < minDiff) {
                optimalSize = size;
                minDiff = Math.abs(size.height - targetHeight);
            }
        }

        // Cannot find preview size that matches the aspect ratio, ignore the requirement
        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Camera.Size size : sizes) {
                if (Math.abs(size.height - targetHeight) < minDiff) {
                    optimalSize = size;
                    minDiff = Math.abs(size.height - targetHeight);
                }
            }
        }
        return optimalSize;
    }
}

Related

  1. getPreviewSize(Camera.Parameters cp)
  2. getSizeLB(List sizes, int w, int h)
  3. getSizeRATIO(List sizes, int w, int h)
  4. getSizeSIZE(List sizes, int w, int h)
  5. getSizeWIDTH(List sizes, int w, int h)
  6. getOptimalPreviewSize(List sizes, int w, int h)
  7. getOptimalPreviewSize(List supportedSizes, int w, int h)
  8. getOptimalPreviewSize(int displayOrientation, int width, int height, Camera.Parameters parameters)
  9. getBiggestPictureSize( Camera.Parameters parameters)