Camera2 Jpeg撮影画像の方向設定|Android開発
Camera2 API(android.hardware.camera2)でJpeg撮影画像の向きを指定する方法です。
※エラー処理やその他の変数については割愛しています。
設定方法
CaptureRequest.BuilderでJPEG_ORIENTATIONを指定します。
CaptureRequest.Builder captureBuilder =
camera.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, orientation);
captureSession.capture(captureBuilder.build(), mCaptureCallback, null);
orientationの取得方法
private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
CameraManager cameraManager =
(CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
int sensorOrientation;
try {
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
Integer value = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
if (value != null) {
sensorOrientation = value;
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
int orientation = (ORIENTATIONS.get(rotation) + sensorOrientation + 270) % 360;
cameraId
は撮影するカメラIDです。