首页 文章

设置缩小的相机预览,以获得与宽度相关的正确图像宽高比

提问于
浏览
0

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

2 回答

  • 2

    The AOSP Camera uses a PreviewFrameLayout作为预览的 SurfaceView 的包装器 . 他们根据他们从 Camera 中选择的预览大小的宽高比在 PreviewFrameLayout 上调用 setAspectRatio() ,并且 PreviewFrameLayout 相应地缩放 SurfaceView .

    由于 PreviewFrameLayout 是开源的,所以没有什么能阻止你将它克隆到你自己的项目中,正如我在this one中所做的那样 .

    所以,在你的情况下,你将 PreviewFrameLayout 设置为所需的最大大小("half of the current screen size",我使用 LinearLayoutandroid:layout_weight 完成),教它纵横比,把 SurfaceView 放在 PreviewFrameLayout 中,你应该是很高兴去 .

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

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

相关问题