如何在android中设置相机预览的大小

Posted

技术标签:

【中文标题】如何在android中设置相机预览的大小【英文标题】:How to set size of camera preview in android 【发布时间】:2015-02-26 05:28:12 【问题描述】:

我正在尝试在 android 中创建自定义相机。我想设置要拍摄的照片的确切尺寸。我希望这个确切的大小是用户在预览中看到的。如何设置确切的尺寸? (尺寸是指宽度和高度:尺寸)

我在android literatures 中找到以下措辞:

如果你想为你的相机预览设置一个特定的大小,设置这个 在上面的 cmets 中提到的 surfaceChanged() 方法中。什么时候 设置预览大小,您必须使用来自的值 getSupportedPreviewSizes()。不要在 setPreviewSize() 方法。

这一段是否指定了我需要做什么或它是否与其他事情有关?无论如何,有没有人有任何代码 sn-p 来说明我将如何设置大小?假设我想要一个方形图像,我将如何指定它以便预览和最终图像都是方形?

目前我的surfaceChanged方法如下

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
    if (mCamera != null) 
        try 
            mCamera.setPreviewDisplay(holder);
            if (mIsCapturing) 
                mCamera.startPreview();
            
         catch (IOException e) 
            Toast.makeText(CameraActivity.this, "Unable to start camera preview.", Toast.LENGTH_LONG).show();
        
    

感谢您的帮助。

另外,如果它很重要,我的布局是

<FrameLayout
    android:id="@+id/camera_frame"
    android:layout_
    android:layout_
    android:layout_weight="1" >

    <ImageView
        android:id="@+id/camera_image_view"
        android:layout_
        android:layout_ />

    <SurfaceView
        android:id="@+id/preview_view"
        android:layout_
        android:layout_ />
</FrameLayout>

【问题讨论】:

看看Camera.parameters,在开始预览之前设置尺寸。 【参考方案1】:

Camera.Parameters

Parameters parameters = camera.getParameters();  

for (Camera.Size previewSize: camera.getParameters().getSupportedPreviewSizes()) 

     // if the size is suitable for you, use it and exit the loop.
     parameters.setPreviewSize(previewSize.width, previewSize.height);
     break;


camera.setParameters(parameters);
camera.startPreview();

对于方形预览和最终图像,我的做法是使用其他视图隐藏/阻止部分预览以使其成为方形,并在保存拍摄的图像时相应地剪切位图。

不漂亮,但到目前为止我还没有找到更好的解决方案。

【讨论】:

您完全忽略了来自 Google 的直接引用,即 Do not set arbitrary values in the setPreviewSize() method。这是来自官方文档。 任意是的。这就是您需要使用 getSupportedPreviewSizes 提供的值的原因。我会更新我的答案。

以上是关于如何在android中设置相机预览的大小的主要内容,如果未能解决你的问题,请参考以下文章

在 android 中设置显示方向后,相机相机预览不正确

尝试在 SurfaceView 中设置时拉伸相机预览

Android:编码的相机预览帧总是横向的。如何旋转?

如何使用 Android API 将相机预览大小设置为全屏?

如何从图库和相机的 imageview 中设置图像? [复制]

在android中设置相机拍摄的图像?