Я делаю android приложение камеры с камерой2. мой код почти такой же, как в официальном образце camera2, но переведите фрагмент в действие. Я планирую установить масштаб в качестве параметра по умолчанию, поэтому сделал функцию масштабирования в openCamera (w, h). Ниже приведен мой код для установки масштабирования камеры по умолчанию.
private void openCamera(int width, int height) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestCameraPermission();
return;
}
setUpCameraOutputs(width, height);
configureTransform(width, height);
Activity activity = this;
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
try {
if (!cameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
throw new RuntimeException("Time out waiting to lock camera opening.");
}
manager.openCamera(cameraId, stateCallback, backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (InterruptedException e) {
throw new RuntimeException("Interrupted while trying to lock camera opening.", e);
}
try{
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
float maxzoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM));
android.graphics.Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
float zoomLevel = maxzoom/3;
float ratio = (float) 1/zoomLevel;
int cropWidth = m.width() - Math.round((float)m.width()*ratio);
int cropHeight = m.height() - Math.round((float)m.height()*ratio);
android.graphics.Rect zoom = new android.graphics.Rect(cropWidth/2, cropHeight/2, m.width() - cropWidth/2, m.height() - cropHeight/2);
previewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);
try{
captureSession.setRepeatingRequest(previewRequestBuilder.build(), captureCallback, null); // Null Exception occur
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (NullPointerException ex) {
ex.printStackTrace();
}
} catch (CameraAccessException e) {
throw new RuntimeException("can not access camera.", e);
}
}
Нет проблем с масштабированием и камерой. Но когда я устанавливаю свое приложение в android studio и запускаю приложение в первый раз, оно всегда прерывается с исключением нулевой точки в setreapeatingrequest (). После еще 2 или 3 попыток приложение работает нормально. Я подозреваю, что это исключение может произойти, потому что нет предварительного просмотра или что-то. Но я понятия не имею, как я могу исправить эту ошибку. Любое мнение должно быть очень полезным. Заранее спасибо.