Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//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;
        }
    }
}