我再写项目的时候,后置摄像头预览不被拉伸,前置摄像头拉伸
我在切换前后摄像头的方法中,当后置摄像头变为前置摄像头
//现在是后置,变更为前置
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {//代表摄像头的方位,CAMERA_FACING_FRONT前置 CAMERA_FACING_BACK后置
mCamera.stopPreview();//停掉原来摄像头的预览
mCamera.release();//释放资源
mCamera = null;//取消原来摄像头
mCamera = Camera.open(i);//打开当前选中的摄像头
ViewGroup.LayoutParams layoutParams = preview.getLayoutParams();
try {
mCamera.setPreviewDisplay(mPreview.getHoder());//通过surfaceview显示取景画面
// mCamera.setDisplayOrientation(90);
// Camera.Parameters parameters=mCamera.getParameters();
// mCamera.setDisplayOrientation(getPreviewDegree(ChatRoomActivity.instance));// 设置相机的方向
// parameters.set("orientation", "portrait");
// mCamera.setParameters(parameters);
try {
//摄像头画面显示在Surface上
if (mCamera != null) {
Camera.Parameters parameters = mCamera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
int[] a = new int[sizes.size()];
int[] b = new int[sizes.size()];
for (int y = 0; y < sizes.size(); y++) {
int supportH = sizes.get(y).height;
int supportW = sizes.get(y).width;
a[y] = Math.abs(supportW - screenHeight);
b[y] = Math.abs(supportH - screenWidth);
Log.d(TAG,"supportW:"+supportW+"supportH:"+supportH);
}
int minW=0,minA=a[0];
for( int y=0; y<a.length; y++){
if(a[y]<=minA){
minW=y;
minA=a[y];
}
}
int minH=0,minB=b[0];
for( int y=0; y<b.length; y++){
if(b[y]<minB){
minH=y;
minB=b[y];
}
}
Log.d(TAG,"result="+sizes.get(minW).width+"x"+sizes.get(minH).height);
List<Integer> list = parameters.getSupportedPreviewFrameRates();
parameters.setPreviewSize(sizes.get(minW).width,sizes.get(minH).height); // 设置预览图像大小
parameters.setPreviewFrameRate(list.get(list.size() - 1));
mCamera.setParameters(parameters);
mCamera.setDisplayOrientation(90);
mCamera.startPreview();
}
} catch (Exception e) {
if (mCamera != null)
mCamera.release();
mCamera = null;
}
} catch (IOException e) {
e.printStackTrace();
}
mCamera.startPreview();//开始预览
cameraPosition = 0;
break;
}