设置缩小的相机预览,使其具有相对于宽度的正确图像宽高比

时间:2013-06-23 23:49:07

标签: java android image-processing android-camera

所以在我的应用中,我正在显示一个不占用整个屏幕的相机预览。我手动设置显示,但我的图像宽高比不正确。我将显示宽度设置为当前屏幕大小的一半。然后我想设置相对于宽度的高度并保持正确的图像宽高比。如何在保持正确比例的同时设置相机预览高度?

2 个答案:

答案 0 :(得分:2)

The AOSP Camera uses a PreviewFrameLayout作为预览SurfaceView的包装。他们根据setAspectRatio()选择的预览尺寸的宽高比在PreviewFrameLayout上调用CameraPreviewFrameLayout相应地调整SurfaceView

由于PreviewFrameLayout是开源的,因此我没有阻止您将其克隆到您自己的项目中,就像我在this one中所做的那样。

因此,在您的情况下,您将PreviewFrameLayout设置为所需的最大尺寸("当前屏幕尺寸的一半",我希望这样做您正在使用LinearLayoutandroid:layout_weight完成,教会它的宽高比,将SurfaceView放在PreviewFrameLayout中,您应该好好去。

请注意,您应该能够设置android:layout_gravity上的SurfaceView,使其在PreviewFrameLayout中居中。

答案 1 :(得分:0)

我用这个

解决了这个问题
 private Camera.Size getBestPreviewSize(int width, int height)
{
    Camera.Size result=null;
    Camera.Parameters p = camera.getParameters();
    for (Camera.Size size : p.getSupportedPreviewSizes()) {
        if (size.width<=width && size.height<=height) {
            if (result==null) {
                result=size;
            } else {
                int resultArea=result.width*result.height;
                int newArea=size.width*size.height;

                if (newArea>resultArea) {
                    result=size;
                }
            }
        }
    }
    return result;

}