1

携帯電話のカメラを使用する Android アプリに取り組んでおり、カスタム コードを使用しています。

問題は、プレビューに表示されている画像が正しくないことです (画像の縦横比が正しくありません)。

次のコードを使用する場合:

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

   Camera.Parameters params = mCamera.getParameters();
   List<Camera.Size> sizes = params.getSupportedPreviewSizes();
   Camera.Size selected = sizes.get(0);
   params.setPreviewSize(selected.width,selected.height);
   mCamera.setParameters(params);
   mCamera.startPreview();

プレビュー画像はOKです(画像の上下の一部が表示されていないと思います)。

問題は、takePicture メソッドが呼び出された後に表示されるキャプチャされた画像が正しく表示されないことです (画像の縦横比が正しくなく、画像がビューに圧縮されているように見えます)。画像をファイルに保存すると、画像が表示されます。 OKであること。

どちらの場合も画像を正しく表示できるのだろうか。提案?

4

2 に答える 2

3

解決策は簡単でしたが、正しいアスペクト比を手動で設定する必要があることを知りませんでした (自動プロセスではなく、自動プロセスだと思っていましたが、この手順はほとんどのハウツーでは説明されていません)。最後に、私はこのように解決しました:

  1. params.getSupportedPreviewSizes()と を使用して、サポートされているサイズを取得しparams.getSuppertedPictureSize()ます。

  2. メジャーに従って最適な縦横比(幅/高さ) を計算しwidthheight渡されsurfaceChanged(SurfaceHolder holder, int format, int width, int height)ます。

  3. メソッドが呼び出される前に、それぞれsetPreviewSizeとを使用して最適なプレビュー サイズと画像サイズを設定します。setPictureSizestartPreview()

于 2012-07-08T15:46:59.477 に答える
0

画像を保存して正しく表示される場合、問題は撮影された画像ではなく、ユーザーに表示する方法です。ImageView を使用している場合は、(背景ではなく) src を使用していることを確認してください。src は縦横比を維持しますが、背景は背景を埋めるために画像を引き伸ばしたり歪めたりします。同様に、android:adjustViewBounds="true" を設定して、ImageView の境界を調整し、縦横比を維持することができます。

于 2012-07-05T18:29:30.207 に答える