1

私はこのカメラコードを使用して、キャプチャされた画像データを回転するようにカメラに要求しています。

Camera.Parameters params = camera.getParameters();
params.set("rotation", 90);
camera.setParameters(params);

これは、Droidを除くすべての電話で機能するようです。他の誰かがこれを見たことがありますか?画像データは常に横向きですが、Droidのネイティブカメラアプリはポートレート画像を生成します。

Droidは新しいメソッドのみを尊重するのだろうかと思いますCamera.Parameters.setRotation()が、これはAPIレベル5でのみ利用できるようです。

4

3 に答える 3

2

setRotationNexus Oneでもうまくいかなかったようですが、Androidカメラアプリ自体の例に従って、画像の回転を機能させることができました。
ソースコードはこちらから入手できます: https ://android.googlesource.com/platform/packages/apps/Camera

Camera.javaから始めますが、ImageManager.java、Util.java、およびその他のファイルも確認します。

基本的な考え方は、向きの変化を聞いて、写真を撮ったときの向きをキャプチャすることです。次に、コールバックで画像バイトを取得したら、ビットマップを操作して、ビットマップを回転させます。次に、回転したビットマップをjpegに変換し直します。完了したら、このローテーションのためだけに、カメラアプリから衝撃的な量のコードをコピーする必要があります。

于 2010-02-14T03:31:42.440 に答える
0

Droidは、それぞれAPIレベル5と6であるAndroid 2.0(現在は2.0.1)を実行します。

したがって、Droidがローテーションのために(より賢明な)2.0以降のAPIのみを尊重する可能性は十分にあります。

ただし、さまざまなデバイスタイプとOSバージョン間の互換性が懸念されると思います。そのため、OSバージョンを検出した後(を使用してandroid.os.Build.VERSION_CODES)、リフレクションを介して2.0以降のAPIを呼び出す必要があると思います。

于 2009-12-20T00:11:22.303 に答える
0

setRotationドキュメントで説明されているように、ローテーションはjpegexifヘッダーに保存するだけです。ドロイドでは、それが実際に当てはまります。これを確認するには、jheadなどのjpegヘッダー読み取りツールを使用できます。ExifInterface APIを使用して、プログラムのオリエンテーションタグを読み取ることもできます。

于 2009-12-20T12:38:11.077 に答える