setPreviewSize在Nexus 5 kitkat上不起作用 [英] setPreviewSize does not work on Nexus 5 kitkat

查看:200
本文介绍了setPreviewSize在Nexus 5 kitkat上不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用中,我需要将相机预览尺寸设置为640x480. 我在不同的设备和不同的Android版本上尝试过代码(例如,在三星银河S2上为2.3.6,在华硕tf101g上为4.0.3,在银河系上为4.3),最后在带有Android kitkat(4.4)的新Nexus 5上进行了尝试

In my app i need to set the camera preview size at 640x480. I tried my code on different devices and different android versions (for example 2.3.6 on samsung galaxy S2, 4.0.3 on asus tf101g, 4.3 on galaxy nexus), and at the last on the new Nexus 5 with android kitkat(4.4).

我的代码在所有设备上均可正常运行,但在Nexus 5上却无法正常运行.为什么? 实际上,在执行以下步骤之后:

My code works perfectly in all devices, but doesn't work on Nexus 5. Why? In fact after this steps:

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. 为什么?有人有同样的问题吗?

Only on Nexus5 the Log is 1920, 1080. Why? Has Somebody the same problem?

isSupportedSize():

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

它完美地工作.

推荐答案

您尝试过吗? 停止预览并重新启动. 使用此代码,在我的应用程序中,我不需要功能"isSupportedSize".让我知道您是否需要更多帮助.

Have you tried this? Stop the preview and restart it. With this code, in my app, i don't need the function "isSupportedSize". Let me know if you need more help.

    @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();
    }
}

这篇关于setPreviewSize在Nexus 5 kitkat上不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆