14

基本的に、画像などを添付するメッセージング アプリの一部としてカメラ アプリを開発しています。アプリは >= SDK 2.2 で動作する必要があります。

次の理由により、デフォルトの Android カメラを思うように使用できません。

  1. アプリの性質上、画像をディスクに保存するべきではなく、一部の OEM (Samsung) はユーザーに選択権を与えずに保存することを好みます。

  2. そのアプリが画像を保存できるため、他のカメラアプリがインターセプトできるインテントを呼び出すことはできません。

私の現在の問題は、Android のカメラが明らかに縦向きになるのを嫌うという事実に対処することです。具体的には、掘り下げた後、ディスプレイを監視し、ローテーションで を呼び出してsetDisplayOrientation(90)います。これは機能しますが、サーフェスビューの寸法も変更する必要があり、これはサポートされている寸法内で行う必要があります。そうしないと、パラメーター設定によってアプリがクラッシュします。

ここで見つけた別のSOスニペット(getBestPreviewSize()メソッド)でこれを行っていますが、他の誰も持っていないとは信じられない1つの明白な問題があります。

ライフサイクルの一部には、ピクチャ コールバックtakePictureの呼び出しが含まれます。PostViewこれは現在一時停止している画像の静止画像を示しており、SurfaceViewbyteArray を介して raw および/または jpeg コールバックに返されます。私の問題は、一見ランダムに見える一握りのテストデバイスで、この画像がまだ歪んでいることです! したがって、動作は、ユーザーが写真を撮り、提示された画像がつぶれるまで、完全な 4:3 のアスペクト比で動的なカメラ画像を見ることです。バイト配列自体は正しいことに注意してくださいBitmap。メッセージング エンドポイントで を構築すると問題なく表示されますが、これはまだ問題です。

この時点で、静止画の表示を変更する方法がわかりません。誰でもこれで私を助けることができますか?

4

3 に答える 3

6

Androidのカメラシステムはめちゃくちゃです。そして、マザーボードにはんだ付けされているため、カメラチップはportaitアプリケーションを好まないでしょう-すべてのコールバックはカメラの向きでデータを流出させます(受け取るバッファは実際にはネイティブカメラアプリと共有メモリピースです)-アプリケーションがポータイトモードでは、このデータを裏返す必要がありますxy

カメラで使用される表面ビューに画像を表示する代わりに、透明でオーバーレイして、ImageViewそこにビットマップを描画します。

(うまくいけば) Androidデーモンがポートレートモードで動作し、ライブプレビュー上にビットマップを描画するjavaocrプロジェクトからインスピレーションを得ることができます。(git現在リリースされており、gitとmavenに苦労しているので、からチェックアウトしてください。デモディレクトリを参照してください)

于 2012-10-15T11:01:40.653 に答える
3

あなたの問題は、いくつかの異なるレベルにあると思います。

センサーマウント

まず、カメラセンサーはデバイスごとに異なる方法で取り付けられています。Google には、その向きを取得し、正しい回転値を設定してここで修正するための定型コードがあり、API 8 まで有効です。

AR補正

2 つ目の問題は、プレビュー フレームが画面と同じアスペクト比ではないことです。この投稿を使用してそれを解決できます。surfaceview の寸法は最適なプレビュー サイズとは関係がなく、これらの値が一致する必要はありません。

プレビュー フレーム サイズ != 画像サイズ

最後に、takePicture を使用して写真を撮る場合、写真のサイズはプレビュー フレームのサイズとは完全に無関係です。以下を使用して、プレビュー フレーム サイズのクエリと設定を行います: setPreviewSize() / getSupportedPreviewSizes()

以下を使用して、画像サイズを照会および設定します (takePicture() から): getSupportedPictureSizes() / setPictureSize()

運が良ければ、写真とプレビュー フレームのデフォルトが同じになるデバイスもあります。これは、すべてのデバイスに当てはまるわけではありません。

最後に、撮影した写真を表示する場合、SurfaceView と同じサイズでない場合は、AR 補正も行う必要がある場合があります。または、ImageView に描画し、ScaleType.CENTER_INSIDEを使用して縦横比を維持することもできます。

于 2012-10-16T04:53:58.937 に答える
0

QRスキャナーを縦向きに切り替える方法については、この投稿を確認してください:http ://code.google.com/p/zxing/issues/detail?id=178 。それがあなたの写真のポートレートへの交換に関係しているかどうかはわかりませんが、おそらくそれはいくつかのガイダンスを提供します。コメント#11が最も役立つようです。(私は、QRアプリコードがSean Owenから削除されることを承認していません)。

于 2012-10-15T14:17:24.700 に答える