Java tutorial
//package com.java2s; //License from project: Open Source License import java.lang.reflect.Method; import java.util.List; import android.hardware.Camera; public class Main { /** * Attempts to find the camera preview size as close as possible to the given width and height. * If the Android API does not support retrieving available camera preview sizes, this method * returns null. Otherwise, returns the camera preview size that minimizes the sum of the * differences between the actual and requested height and width. */ public static Camera.Size bestCameraSizeForWidthAndHeight(Camera.Parameters params, int width, int height) { // Occasionally width can be less than height, if the device hasn't had time to complete // the rotation to landscape when this method is called. Swap the values in that case. if (width < height) { int tmp = width; width = height; height = tmp; } List<Camera.Size> previewSizes = previewSizesForCameraParameters(params); if (previewSizes == null || previewSizes.size() == 0) return null; Camera.Size bestSize = null; int bestDiff = 0; // Find the preview size that minimizes the difference between width and height. for (Camera.Size size : previewSizes) { int diff = Math.abs(size.width - width) + Math.abs(size.height - height); if (bestSize == null || diff < bestDiff) { bestSize = size; bestDiff = diff; } } return bestSize; } /** Returns a list of available camera preview sizes, or null if the Android API to get the sizes is not available. */ @SuppressWarnings("unchecked") public static List<Camera.Size> previewSizesForCameraParameters(Camera.Parameters params) { try { Method m = params.getClass().getMethod("getSupportedPreviewSizes"); return (List<Camera.Size>) m.invoke(params); } catch (Exception ex) { return null; } } }