3

SDカードに保存する前に、フロントカメラの画像をミラーリングしたい。問題は、Sony Xperia Z5 などの一部のデバイスでは、ミラーリング後に画像が 90 度回転することです。ExifInterface を使用して向きを取得することはできません。ファイルパスが必要であり、私の場合はまだ保存していないためです。

特定のデバイスの向きを取得して、適切に回転させる機会はありますか?

プリセット:

  • Camera2 API
  • ポートレート写真のみ
4

1 に答える 1

3

あなたの 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;
}
于 2016-05-17T07:45:11.770 に答える