カメラハードウェアを使用して画像のリストをキャプチャしようとしています。しかし、カメラビューを起動している間、ビューは通常のようには見えません。スクリーンショットは下に添付されています。私はこれをでテストしていHTC Sensation running android 4.0.3
ます。
Image ScreenShot while in portrait
通常のカメラビューとは異なります。
ここでの問題は何ですか?
私はどこで間違っているのですか?
カメラハードウェアを使用して画像のリストをキャプチャしようとしています。しかし、カメラビューを起動している間、ビューは通常のようには見えません。スクリーンショットは下に添付されています。私はこれをでテストしていHTC Sensation running android 4.0.3
ます。
Image ScreenShot while in portrait
通常のカメラビューとは異なります。
ここでの問題は何ですか?
私はどこで間違っているのですか?
これは、Androidをポートレートモードで使用してカスタムカメラを作成する場合の通常の問題です。カメラのプレビューを表示するために使用されているSurfaceViewがある可能性があります。surfaceCreated
次のコード行をメソッドに追加します。
camera.setDisplayOrientation(90);
詳細については、このトピックに関する他の回答を確認してください(ここに1つ、もう1つあります)。基本的に、Androidカメラは横向きモードで表示するように設定されているため、アクティビティが縦向きモードの場合は、これに対応するために向きを回転させる必要があります。
デフォルトでは、ハードウェア カメラは横向き (ほとんどのデバイス) であるため、一度にキャプチャすると、横向きで撮影されたかのように、自動的に 90 度に回転します。
そのため、横向きで撮影すると正しい画像が得られ、縦向きで撮影すると 90 度回転した画像が得られます。
以下のコードを使用して向きを検出します。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null)
{
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
// code in portrait - rotate to 90 degree
}
else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
// code in landscape - do nothing
}
}
}