2017-05-10 12 views
0

카메라 응용 프로그램을 만들고 있습니다. 미리보기 그림은 90도 회전되었습니다. 그래서 코드를 변경하고 코드를 추가하여 카메라의 올바른 디스플레이 방향을 설정했습니다. 나는 응용 프로그램을 실행할 때 지금, 그것은 충돌 및 오류 메시지가java.lang.RuntimeException : setParameters가 실패했습니다. 카메라 매개 변수를 설정하는 중

java.lang.RuntimeException가 있습니다 : setParameters이

실패

내 surfaceChanged (INT의 시간, w INT SurfaceHolder에 홀더, INT 형식) 및 surfaceCreated (SurfaceHolder 홀더) 메소드는 다음과 같습니다.

public void surfaceChanged(SurfaceHolder holder,int format,int w,int h){ 
    Camera.Parameters mparameters; 
    mholder = holder; 
    mparameters = mcamera.getParameters(); 
    mparameters.setPreviewSize(mpreviewsizewidth,mpreviewsizeheight); 
    mparameters.setPictureSize(mpreviewsizewidth,mpreviewsizeheight); 
    String mCameraFlashMode = mparameters.getFlashMode(); 
    if(mCameraFlashMode != null){ 
     mparameters.setFlashMode(mparameters.FLASH_MODE_ON); 
    } 
    if(mparameters.getFocusMode() != null) { 
     mparameters.setFocusMode(mparameters.FOCUS_MODE_AUTO); 
    } 
    Display display = ((WindowManager)mcontext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

    if(display.getRotation() == Surface.ROTATION_0) 
    { 
     mparameters.setPreviewSize(mpreviewsizeheight, mpreviewsizewidth); 
     mcamera.setDisplayOrientation(90); 
    } 

    if(display.getRotation() == Surface.ROTATION_90) 
    { 
     mparameters.setPreviewSize(mpreviewsizewidth, mpreviewsizeheight); 
    } 

    if(display.getRotation() == Surface.ROTATION_180) 
    { 
     mparameters.setPreviewSize(mpreviewsizeheight, mpreviewsizewidth); 
    } 

    if(display.getRotation() == Surface.ROTATION_270) 
    { 
     mparameters.setPreviewSize(mpreviewsizewidth, mpreviewsizeheight); 
     mcamera.setDisplayOrientation(180); 
    } 

    mcamera.setParameters(mparameters); 
    try { 
     mcamera.setPreviewDisplay(mholder); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
    mcamera.startPreview(); 
} 

public void surfaceCreated(SurfaceHolder holder){ 
    mcamera = Camera.open(); 
    try{ 
     mcamera.setPreviewDisplay(holder); 
     mcamera.setPreviewCallback(this); 
    }catch(IOException e){ 
     mcamera.release(); 
     mcamera = null; 
    } 
} 

내가 카메라 매개 변수를 설정하는 동안이 응용 프로그램이 충돌하지 않도록 내 코드를 수정할 수 있고, 미리보기가 올바른 방향으로 표시 할 수있는 방법을 도와주세요.

답변

0

카메라 개체에서 지원하지 않는 미리보기 크기를 설정하려고하는 것 같습니다. 먼저 지원되는 previewSizes 목록을 가져 와서 실제로 설정할 수있는 값을 확인해야합니다.

List<Camera.Size> sizes = cam.getParameters().getSupportedPreviewSizes();