我正在制作相机应用程序。预览图片旋转90度。所以我更改了代码并添加了代码来设置相机的正确显示方向。现在,当我运行应用程序时,它崩溃并且错误消息是
java.lang.RuntimeException:setParameters failed
我的surfaceChanged(SurfaceHolder holder,int format,int w,int h)和surfaceCreated(SurfaceHolder holder)方法如图所示。
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 :(得分:1)
我猜您正在尝试设置Camera对象不支持的预览尺寸。 您应首先获取支持的previewSizes列表,以检查您可以实际设置的值。
List<Camera.Size> sizes = cam.getParameters().getSupportedPreviewSizes();