客户提出在后台进行放大缩小,可以实时传输到手机上,进行放大以及缩小.
此时就需要设置焦距值来达到客户需求
Camera1Session
//设置摄像头焦距问题
public static void settingVideoZomm(int zoom){
if(zoom>getCamearMaxZoom()){
return;
}
if(zoomcamera == null){
return;
}
final Camera.Parameters parameters = zoomcamera.getParameters();
parameters.setZoom(zoom);
zoomcamera.setParameters(parameters);
}
//获取摄像头最大焦距
public static int getCamearMaxZoom(){
final Camera.Parameters parameters = zoomcamera.getParameters();
return parameters.getMaxZoom();
}
Camera2Session
/*
isZoomIn 是否放大
mZoom 放大大小
*/
public static void settingZoom(int mZoom){
cameraThreadHandler.post(new Runnable() {
@Override
public void run() {
Rect rect = handleZoom(mZoom);
try {
final CaptureRequest.Builder captureRequestBuilder =
cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, rect);
captureRequestBuilder.addTarget(surface);
if (mediaRecorderSurface != null) {
Logging.d(TAG, "Add MediaRecorder surface to CaptureRequest.Builder");
captureRequestBuilder.addTarget(mediaRecorderSurface);
}
captureSession.setRepeatingRequest(captureRequestBuilder.build(), new CameraCaptureCallback(), cameraThreadHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
});
}
public static Rect handleZoom(int mZoom) {
int maxZoom = cameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM).intValue()
* 10;
Rect rect = cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
int minW = rect.width() / maxZoom;
int minH = rect.height() / maxZoom;
int difW = rect.width() - minW;
int difH = rect.height() - minH;
int cropW = difW * mZoom / 100;
int cropH = difH * mZoom / 100;
cropW -= cropW & 3;
cropH -= cropH & 3;
Rect zoomRect = new Rect(cropW, cropH, rect.width() - cropW, rect.height() - cropH);
return zoomRect;
}
首先获取最大焦距值,然后传入zoom,保证zoom小于最大焦距值即可!(测试机 华为p30)