【问题标题】:setPreviewSize does not work on Nexus 5 kitkatsetPreviewSize 不适用于 Nexus 5 kitkat
【发布时间】:2023-04-01 21:20:01
【问题描述】:

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

我的代码在所有设备上都能完美运行,但在 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;
}

完美运行。

【问题讨论】:

  • 据我所知,Nexus 5 确实支持 640x480 预览尺寸,但您的 isSupportedSize() 可能是错误的。无论如何,第一个 sn-p 是错误的,因为它没有调用 camera.setParameters()。
  • mCamera.getParameters().setPreviewSize(640, 480) 适用于其他设备

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


【解决方案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();
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 2016-01-24
      相关资源
      最近更新 更多