Android は、すべてのカメラと画面の向きに対してカメラ プレビューを上向きに表示するために、次のコードを提供します。
public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees + 360) % 360;
}
camera.setDisplayOrientation(result);
}
最も単純なケースでは、画面が縦rotation
向き ( が 0) で、カメラが背面にある場合、これは に減少しresult = info.orientation
ます。ドキュメントによると、 info.orientation は
ディスプレイ上で自然な向きで正しく表示されるように、カメラ画像を時計回りに回転させる必要がある角度。0、90、180、または 270 にする必要があります。
これはinfo.orientation
、カメラからの生の画像が反時計回りに回転する量であることを意味します。
Samsung Galaxy S II の背面カメラでinfo.orientation
は、背面カメラの予想どおり、90 です。ただし、RAW カメラ プレビューは反時計回りではなく、時計回りに 90 度回転します。これは、上記のコードを適用した後、プレビューが上下逆さま (180 度) に表示されることを意味します。
報告されたカメラの向きと生の画像の実際の向きとの間に 180 度の不一致があるのはなぜですか?
この正確な問題 - カメラの画像が 90 度と報告されたときに時計回りに 90 度になる- は、この質問とこのinfo.orientation
質問でも報告されています。
このおそらく関連する質問も参照してください。