Java tutorial
//package com.java2s; /* * Copyright 2012 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.lang.reflect.Method; import java.util.List; import android.hardware.Camera; public class Main { /** Updates the Camera object's preview size to the nearest match for the given width and height. * Returns the preview size whether it was updated or not. */ public static Camera.Size setNearestCameraPreviewSize(Camera camera, int width, int height) { Camera.Parameters params = camera.getParameters(); Camera.Size size = bestCameraSizeForWidthAndHeight(params, width, height); if (size != null) { params.setPreviewSize(size.width, size.height); camera.setParameters(params); } return params.getPreviewSize(); } /** 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) { 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. */ 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; } } }