0

好的,制作一个相机应用程序,其中一部分是选择 img 大小,使用以下代码完成:

Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();

我得到了一个很好的列表,其中包含受支持的尺寸。两个最差的分辨率是 640x480 和 320x240。但是当我将分辨率设置为 320x240 时,会使用 640x480!

我使用以下代码设置分辨率:

private void setImgSize() 
{
    Log.d(TAG, "+setImgSize");
    Camera.Parameters params = camera.getParameters();
    params.setPictureSize(WIDTH, HEIGHT);
    camera.setParameters(params);

    Toast.makeText(getApplicationContext(), 
        "Resolution set to "+WIDTH+"x"+HEIGHT, 
        Toast.LENGTH_SHORT).show();
}

WIDTH 和 HEIGHT 是从 settingsactivity 返回的值,我得到一个不错的 Toast,告诉我分辨率设置为 320x240。但是当图像被捕获时,分辨率是 640x480!好的,测试2。让我们将分辨率设置为 640x480。Toast 告诉我们分辨率是 640x480。凉爽的。让我们捕捉一些图像,它们的分辨率是定义的 640x480!

那么,我在这里做错了什么和/或我不明白什么?!?!我获得了受支持的图像尺寸,并且至少其中一个不受支持。有什么方法可以检查是否真的支持所选的分辨率?

我使用的设备是 Android 版本 2.3.5 的华为 Ideos X5 / U8800。

感谢帮助 :)

PS 在有人问我为什么要使用这么糟糕的分辨率之前,这就是为什么:这个应用程序将以 N 秒的间隔捕获图像。如果应用程序正在运行,比方说,长时间,我可能会用完大图像的 sd 卡中的空间:)

编辑:更改了 setImgSize() 方法,现在看起来像这样:

private void setImgSize() {
    Log.d(TAG, "+setImgSize");
    Camera.Parameters params = camera.getParameters();
    params.setPictureSize(WIDTH, HEIGHT);
    // set jpeg quality to best
    params.setJpegQuality(100);

    camera.setParameters(params);

    params = null;
    params = camera.getParameters();
    Camera.Size size = params.getPictureSize();
    Toast.makeText(getApplicationContext(), 
                "Resolution set to "+size.width+"x"+size.height,                
                Toast.LENGTH_SHORT).show();
}

我设置了分辨率(320x240),当我从重新读取参数中读取它时,结果是 320x240,但是当图像被捕获时,分辨率是 640x480 :(

4

1 回答 1

1

我认为您应该致电了解getSupportedPictureSizes()支持Camera.Parameters哪些图像尺寸。

然后您可以选择最接近您实际想要设置的支持的图像尺寸。

于 2013-02-20T12:59:45.523 回答