0

所以在我的应用程序中,我正在显示一个不占用整个屏幕的相机预览。我正在手动设置显示,但我得到的图像纵横比不正确。我将显示宽度设置为当前屏幕尺寸的一半。然后我想设置与宽度相关的高度并保持正确的图像纵横比。如何在保持正确比例的同时设置相机预览高度?

4

2 回答 2

3

AOSP 相机使用 aPreviewFrameLayoutSurfaceView作为预览的包装器。他们根据从 中选择的预览大小的纵横比调用setAspectRatio()PreviewFrameLayoutCamera相应地PreviewFrameLayout缩放SurfaceView

由于PreviewFrameLayout是开源的,没有什么能阻止你将它克隆到你自己的项目中,就像我在这个.

因此,在您的情况下,您将 设置PreviewFrameLayout为所需的最大尺寸(“当前屏幕尺寸的一半”,我希望您使用LinearLayoutand来完成android:layout_weight),教它纵横比,把SurfaceView在中PreviewFrameLayout,你应该很高兴。

请注意,您应该能够将 设置为android:layout_gravitySurfaceView中居中PreviewFrameLayout

于 2013-06-24T00:02:22.843 回答
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;

}
于 2013-07-09T02:02:30.493 回答