7

次のコードを使用して、写真を撮影して内部ストレージに保存しようとしています。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
takenPhoto = new File(uploadsFolder, getNewPicFileName());
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(takenPhoto));
startActivityForResult(intent, SHOOT_MEDIA_REQUEST_CODE);

問題は、Nexus S および Galaxy S デバイスのデフォルトであり、ACTION_IMAGE_CAPTURE インテントの単一の向きが横になっていることです。ポートレートモードで写真を撮影すると、その写真は「takenPhoto」ファイルに回転して保存されます。

この問題は、Samsung Galaxy S デバイス (Galaxy S および Nexus S) でのみ発生するようです。別のデバイスでは、画像撮影中の向きに応じて自動回転を試みました。

その問題について何か助けていただければ幸いです。

4

2 に答える 2

3

私が知る限り、これは、MediaStore.Images.ImageColumns.ORIENTATIONこの Intent によって値が設定されていないために発生しています。通常のカメラアプリを介して物事が来ると設定されます。

ただし、私の Nexus S では、ファイルは正しい EXIF データを取得します。したがって、次のような方向を取得できます。

ExifInterface exif = new ExifInterface("filepath");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                     ExifInterface.ORIENTATION_NORMAL);

次に、 ContentResolver.updateを使用して、正しい ORIENTATION データを追加できます。ExifInterface の方向オプションを回転角度に変換するだけです。

もう 1 つのオプションは、独自のアクティビティを作成してカメラ ハードウェアを操作し、ファイルを記録することです。次に、回転を追跡し、キャプチャした画像を保存するときに値をメタデータに書き込みます。カメラ アプリは Android の一部であるため、おそらくそれほど苦労せずにコピーして変更することができます。

于 2011-09-30T08:31:36.000 に答える
0

私はギャラクシーエースを含むサムスンの携帯電話でもこの問題を経験しました(私はカメラアクションをあなたのものとはまったく異なる方法と呼びました)

私の推測では、これはOS/ハードウェアレベルの問題です。ネイティブカメラアプリケーションを使用して写真を撮ってみて、そのアプリで正しい向きになるように管理しましたか?

于 2011-08-31T02:58:54.230 に答える