mCamera.setParameters(parameters);
}
}
}
}
1.4设置预览surface,即接收并显示图像的容器
实际设置的是surfaceHolder
private void setPreviewSurface(SurfaceHolder previewSurface) {
if (mCamera != null && previewSurface != null) {
try {
mCamera.setPreviewDisplay(previewSurface);
} catch (IOException e) {
e.printStackTrace();
}
}
}
1.5启动预览
private void startPreview() {
if (mCamera != null && mPreviewSurface != null) {
// 增加callback,便于buffer复用
mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// 使用完buffer之后回收复用
camera.addCallbackBuffer(data);
}
});
mCamera.startPreview();
}
}
二、相机预览方向校正
因为手机摄像头硬件的设计,不做额外的处理,相机预览的图像角度是错误的,准确的说竖屏状态下,逆时针偏了90°。
上文有一句代码,设置相机预览的旋转方向,此处补充说明.
mCamera.setDisplayOrientation(getCameraDisplayOrientation(mCameraInfo));
private int getCameraDisplayOrientation(Camera.CameraInfo cameraInfo) {
int roration = getWindowManager().getDefaultDisplay().getRotation();
// 屏幕显示方向角度(相对局部坐标Y轴正方向夹角)
int degrees = 0;
switch (roration) {
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;
case Surface.ROTATION_270:
degrees = 270;
break;
}
int result;
if (c