@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mPreviewSurface = null;
mPreviewSurfaceWidth = 0;
mPreviewSurfaceHeight = 0;
}
}
打开相机,参数为cameraid
private void openCamera(int cameraId) {
Camera camera = mCamera;
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){
//打开相机
mCamera = Camera.open(cameraId);
mCameraId = cameraId;
mCameraInfo = cameraId == mFrontCameraId ? mFrontCameraInfo : mBackCameraInfo;
// 设置相机方向,后面2.1处详细讲述
mCamera.setDisplayOrientation(getCameraDisplayOrientation(mCameraInfo));
}
}
1.3设置预览属性,尺寸、编码格式
查询支持的预览尺寸、编码格式,根据需要设置。
private void setPreviewSize(int shortSide, int longSide) {
if (mCamera != null && shortSide != 0 && longSide != 0){
float aspectRatio = (float)longSide / shortSide;
Camera.Parameters parameters = mCamera.getParameters();
List<Camera.Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();
for (Camera.Size previewSize : supportedPreviewSizes) {
//1.设置预览尺寸
if((float)previewSize.width / previewSize.height == aspectRatio && previewSize.height <= shortSide && previewSize.width <= longSide) {
parameters.setPreviewSize(previewSize.width, previewSize.height);
//2.设置预览的编码格式,此处PREVIEW_FORMAT = ImageFormat.NV21
// NV21 即 YUV
if(isPreviewFormatSupported(parameters, PREVIEW_FORMAT)){
parameters.setPreviewFormat(PREVIEW_FORMAT);
int frameWidth = previewSize.width;
int frameHeight = previewSize.height;
int previewFormat = parameters.getPreviewFormat();
PixelFormat pixelFormat = new PixelFormat();
PixelFormat.getPixelFormatInfo(previewFormat, pixelFormat);
int bufferSize = (frameWidth * frameHeight * pixelFormat.bitsPerPixel) / 8;
//3.设置预览的缓冲数组
mCamera.addCallbackBuffer(ne

最低0.47元/天 解锁文章
595

被折叠的 条评论
为什么被折叠?



