- 设置了previewSize和pictureSize:
但是通过打Log看出当时设置的时候分辨率是改变了的,然而正是拍照的时候分辨率又变回系统默认的了,在不同的机子上默认的分辨率不同。 - setParameters failed 问题
- 我的华为的默认的previewSize是最高的,然而pictureSize又是最低的:
导致预览的图片十分清晰,而拍出的照片十分小且模糊。 - 同样使用默认分辨率,在一些机子上会出现预览变形的情况。
1.设置预览分辨路和图片分辨率:
Camera.Parameters param = camera.getParameters();
param.setPreviewSize(width, height); //width一般大于height setParameters failed问题解决:
param.setPictureSize(width, height);//width一般大于height setParameters failed问题解决:
camera.setPerviewSize(screenWidth,screenHeight);// 不要这样设置,不然不会设置成功的;camera.setPerviewSize(screenHeight , screenWidth );//应该这样设置,第一个参数大于后面那个参数
params.set("orientation", "landscape");//这样设置也可以
camera.setDisplayOrientation(90);//相机旋转90度,便成竖屏
camera.setParameters(param);//这句话不要忘记
2. setParameters failed问题解决:
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:1834)
3.width一般大于height,因为默认的摄像头是横向的,在我们预览的时候也要设置
camera.setDisplayOrientation(90);
4.预览变形解决:
一般手机屏幕分辨率为16:9,而可能默认的预览分辨率是4:3的,
然而我们在设置布局文件的时候设置的预览界面SurfaceView宽高均为match_parent,让预览界面充满屏幕,
所以自然就会出现预览变形的情况。<SurfaceView android:id="@+id/surface_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true"/>
通过Context进行:WindowManager windowManager = mcontext.getWindowManager(); Display display = windowManager.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); //获取屏幕的宽和高 display.getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels;
计算预览分辨率的宽高比: public String getSurfaceViewSize(int width, int height) { if (equalRate(width, height, 1.33f)) { return "4:3"; } else { return "16:9"; } } public boolean equalRate(int width, int height, float rate) { float r = (float)width /(float) height; if (Math.abs(r - rate) <= 0.2) { return true; } else { return false; } }
根据分辨率设置SurfaceView的大小: /** * 根据分辨率设置预览SurfaceView的大小以防止变形 * * @param surfaceSize */ private void setSurfaceViewSize(String surfaceSize) { ViewGroup.LayoutParams params = surfaceView.getLayoutParams(); if (surfaceSize.equals("16:9")) { params.height = ViewGroup.LayoutParams.MATCH_PARENT; } else if (surfaceSize.equals("4:3")) { params.height = 4 * screenWidth / 3; } surfaceView.setLayoutParams(params);
这样基本就不会变形了,还有些手机可能既不是16:9也不是4:3 的屏幕分辨率,都可以通过计算比例适当缩放使其不变形。
- 设置了previewSize和pictureSize,但是通过打Log看出当时设置的时候分辨率是改变了的,然而正是拍照的时候分辨率又变回系统默认的了,在不同的机子上默认的分辨率不同。
- setParameters failed 问题
- 我的华为的默认的previewSize是最高的,然而pictureSize又是最低的,导致预览的图片十分清晰,而拍出的照片十分小且模糊。
- 同样使用默认分辨率,在一些机子上会出现预览变形的情况。
Android Camera开发分辨率 清晰度 图像变形
最新推荐文章于 2024-07-26 10:57:45 发布