一、相机相关参数
1.相机id
根据指定的相机id打开相机。
//Camera.CameraInfo.CAMERA_FACING_BACK,Camera.CameraInfo.CAMERA_FACING_FRONT
int mCameraId = Camera.CameraInfo.*CAMERA_FACING_FRONT*;
mCamera = Camera.*open*(mCameraId);
相机id对应着Camera.CameraInfo的facing字段。
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
for (int i = 0; i < Camera.*getNumberOfCameras*(); i++) {
Camera.*getCameraInfo*(i, cameraInfo);
Log.*d*(*TAG*, "getCameraInstance: camera facing=" + cameraInfo.facing + ",camera orientation=" + cameraInfo.orientation);
}
2.图像格式
可以通过Camera.Parameters.getSupportedPreviewFormats()获取支持的图像格式列表,通过Camera.Parameters.setPreviewFormat(pixel_format)来设置图像格式。
List supportedPreviewFormats = parameters.getSupportedPreviewFormats();
parameters.setPreviewFormat(ImageFormat.NV21);
默认格式为NV21,建议选择的颜色格式为NV21和YV12,这两个是所有机型均支持的。
NV21: YYYYYYYY VU VU => YUV420SP
YV12: YYYYYYYY VV UU => YUV420P
二者均为 YUV 4:2:0采样,即每四个Y共用一组UV分量。其大小为 width * heigh * 3/2 byte。
3.大小(宽度、高度)
大小包括预览尺寸(PreviewSize)和图像尺寸(PictureSize),最好选择一致。
可以通过Camera.Parameters.getSupportedPreviewSizes()获取手机支持的Size列表,选择所需要的大小。通过Camera.Parameters.setPreviewSize和setPictureSize设置大小。
List mapSizes = parameters.getSupportedPreviewSizes();
parameters.setPreviewSize(mImageSize.width, mImageSize.height);
parameters.setPictureSize(mImageSize.width, mImageSize.height);
一般是根据期望的范围,选择一个合适的大小。
private Camera.Size getPreferredPreviewSize(Camera.Parameters parameters, int width, int height) {
List mapSizes = parameters.getSupportedPreviewSizes();
List collectorSizes = new ArrayList<>();
for (Camera.Size option : mapSizes) {
Log.i(TAG, " option.width=" + option.width + " option.height=" + option.height);
if (width > height) {
if (option.width >= width && option.height >= height) {
collectorSizes.add(option);
}
} else {
if (option.width >= height && option.height >= width) {
collectorSizes.add(option);
}
}
}
if (collectorSizes.size() > 0) {
return Collections.min(collectorSizes, new Comparator() {
@Override
publi