0

我在我的应用程序中遇到了这个奇怪的问题,当我将 parameters.setPreviewSize(width,height) 设置为从支持的预览尺寸 (Camera.Parameters.getSupportedPreviewSizes()) 获得的特定值时,相机没有捕捉到图片。当我尝试使用其他一些尺寸(从支持的预览尺寸获得)时,相机会拍照。

首先,我打开相机并在 surfaceChanged 方法中设置相机参数。我的目标是根据设备屏幕的宽度和高度设置相机的预览大小。我正在寻找支持的最大尺寸,其宽度小于或等于屏幕设备的宽度。

在 Nexus 4 上,我得到的值为 768 * 432。这是我循环通过 getSupportedPreviewSizes(); 时所有尺寸的列表;

宽高1280*720800
*
480768*432720
* 480640
*
480576*432480*320384*288352
*
288320
*240240
*
160176
*144

我将预览大小设置为 768 * 432,如下所示:- parameters.setPreviewSize(768, 432);

然后设置一些其他参数,最后是 camera.setParameters(parameters); 和 camera.startPreview()。

当我单击捕获按钮时,自动对焦回调执行:-

 Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
            camera.setPreviewCallback(null);
            camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    };

但随后 camera.takePicture 不会调用其余的回调,即实际拍摄照片的地方。

如果我将预览大小设置为 800 * 480 或 720 * 480 或上面列表中的任何其他大小,则相同的代码可以工作。

到目前为止,此问题仅在 Nexus 4 上报告。该相机在许多其他设备上运行良好。

有没有办法可以确保我在特定设备上选择的预览大小将始终在该设备上工作?

有人可以对此有所了解。

提前非常感谢。苛刻的86

4

2 回答 2

0

尝试在拍照前停止预览。

于 2013-08-27T23:15:17.667 回答
0

预览大小与硬件相关。不保证您从一台设备获得的预览大小可以在其他设备上使用。您必须检查每台设备上支持的预览大小。此外,您永远不能 100% 信任所有获得的预览大小。由于硬件原因,其中一些可能无法正常工作。当我想在三星的设备上设置一些预览尺寸时,我已经有了经验,但并不是所有的预览尺寸都可以工作。所以有时,你必须尝试不同的预览大小。

于 2013-08-28T01:39:53.683 回答