Camera2 Jpeg撮影画像の方向設定|Android開発

      2018/05/24

Camera2 API(android.hardware.camera2)でJpeg撮影画像の向きを指定する方法です。
※エラー処理やその他の変数については割愛しています。

設定方法

CaptureRequest.BuilderJPEG_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です。

 - Android