SDカードに保存する前に、フロントカメラの画像をミラーリングしたい。問題は、Sony Xperia Z5 などの一部のデバイスでは、ミラーリング後に画像が 90 度回転することです。ExifInterface を使用して向きを取得することはできません。ファイルパスが必要であり、私の場合はまだ保存していないためです。
特定のデバイスの向きを取得して、適切に回転させる機会はありますか?
プリセット:
- Camera2 API
- ポートレート写真のみ
SDカードに保存する前に、フロントカメラの画像をミラーリングしたい。問題は、Sony Xperia Z5 などの一部のデバイスでは、ミラーリング後に画像が 90 度回転することです。ExifInterface を使用して向きを取得することはできません。ファイルパスが必要であり、私の場合はまだ保存していないためです。
特定のデバイスの向きを取得して、適切に回転させる機会はありますか?
プリセット:
あなたの captureBuilder には、撮影前に画像の「向き」を設定するパラメータがあります。 CaptureRequest.JPEG_ORIENTATION
Android 開発者のウェブサイトは次のように述べています。
JPEG 画像の向き。
正立表示するために JPEG 画像を回転させる必要がある、カメラの向きに対する時計回りの回転角度 (度単位)。
カメラ デバイスは、この値を JPEG EXIF ヘッダーにエンコードするか、この向きに合わせて画像データを回転させることができます。画像データを回転すると、サムネイルデータも回転します。
この向きは、android.sensor.orientation で指定されたカメラ センサーの向きに相対的であることに注意してください。
このパラメーターは CaptureBuilder で設定できます。
//To get the right orientation we must to get it in base of the sensor position.
mSensorOrientation = getSensorOrientation();
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, mSensorOrientation);
CameraManager から取得できる CameraCharacteristics からセンサーの向きを取得します。
public int getSensorOrientation() throws CameraAccessException {
return mCameraManager.getCameraCharacteristics(mCameraId).get(
CameraCharacteristics.SENSOR_ORIENTATION);
}
それがあなたを助けることを願っています!
編集:正面カメラを使用しているかどうか、センサーデバイスの向き、および写真に取得したい向きに応じて、写真の「実際の」向きを取得するためにずっと前に見つけた方法を添付します。
public static int sensorToDeviceRotation(boolean mirror, int deviceOrientation, int sensorOrientation) {
// Reverse device orientation for front-facing cameras
if (mirror) {
deviceOrientation = -deviceOrientation;
}
// Calculate desired JPEG orientation relative to camera orientation to make
// the image upright relative to the device orientation
return (sensorOrientation + deviceOrientation + 360) % 360;
}