setPreviewSize不适用于Nexus 5 kitkat

时间:2013-12-02 20:31:28

标签: parameters camera size preview android-4.4-kitkat

在我的应用中,我需要将相机预览尺寸设置为640x480。 我在不同的设备和不同的Android版本上尝试了我的代码(例如关于三星galaxy S2的2.3.6,关于asus tf101g的4.0.3,关于galaxy nexus的4.3),以及最后一个关于Android kitkat的新Nexus 5(4.4)

我的代码在所有设备上都能正常运行,但在Nexus 5上无效。为什么? 实际上在这个步骤之后:

int PREVIEW_WIDTH = 640;
int PREVIEW_HEIGHT = 480;
if(isSupportedSize(PREVIEW_WIDTH,PREVIEW_HEIGHT,mCamera)){
//isSupportedSize controls that width and height are supported by mCamera
mCamera.getParameters().setPreviewSize(PREVIEW_WIDTH,PREVIEW_HEIGHT);
Log.d("debug myapp", "Preview sizes: "  + mCamera.getParameters().getPreviewSize().width
                    + ", "
                    + mCamera.getParameters().getPreviewSize().height);
}

或此步骤:

int PREVIEW_WIDTH = 640;
int PREVIEW_HEIGHT = 480;
Camera.Parameters param= mCamera.getParameters();
if(isSupportedSize(PREVIEW_WIDTH,PREVIEW_HEIGHT,param)){
//isSupportedSize controls that width and height are supported by mCamera
param.setPreviewSize(PREVIEW_WIDTH,PREVIEW_HEIGHT);
mCamera.setParameters(param);
Log.d("debug myapp", "Preview sizes: "  + mCamera.getParameters().getPreviewSize().width
                    + ", "
                    + mCamera.getParameters().getPreviewSize().height);
}

仅在Nexus5上,日志为1920,1080。 为什么?有人有同样的问题吗?

isSupportedSize():

private boolean isSupportedSize(int width, int height, Camera cam){
    Camera.Parameters param = cam.getParameters();
    List<Size> suppSizes = param.getSupportedPreviewSizes();
    for (Size s: suppSizes){
        if (s.width == width && s.height == height){
            Log.d("debug", "sizes supported!");
            return true;
        }
    }
    return false;
}

效果很好。

2 个答案:

答案 0 :(得分:1)

你试过这个吗? 停止预览并重新启动它。 使用此代码,在我的应用程序中,我不需要函数“isSupportedSize”。如果您需要更多帮助,请告诉我。

    @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    if (holder.getSurface() == null) {
        return;
    }

    try {
        mCamera.stopPreview();
    } catch (Exception e) {
        // TODO: handle exception
    }
    try {
        mCamera.setPreviewDisplay(holder);
        Camera.Parameters parameters=mCamera.getParameters();           
        parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
        mCamera.setParameters(parameters);
        mCamera.startPreview();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

请参阅this post的回答。有些平板电脑似乎允许在预览模式下更改预览尺寸,而其他平板电脑则不允许。