質問

また複数のものを取得しようとしカメラのプレビューのための縦画面で、 SurfaceView.あります。私がテストドロイドが2.0.1.てみました:

1)強制的にレイアウトする肖像: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2)

Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.setRotation(90);
camera.setParameters(parameters);

はありましたかきひ体験してみてください。このプログラムにバグアンドロイドや電話をしたいので、信頼性の向上に努めていますがの場合のように証明できるものです。

おかげさ Prasanna

正しい解決策はありません

他のヒント

8 LVL APIの

のように、これは利用可能です。

公共の最終無効setDisplayOrientation(int型度)

すなわち。マニフェストで撮りでます:

public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();
    mCamera.setDisplayOrientation(90);

私は多分少ないます。

(欲望でテスト)2.1で働いてポートレートモードのためのワーキングソリューションを持っています

アクティビティ画面の向きがポートレートに設定されています。 (アンドロイド:screenOrientation = "ポートレート")

カメラパラメータ:

Camera.Parameters P = mCamera.getParameters();

 p.set("jpeg-quality", 100);
 p.set("orientation", "landscape");
 p.set("rotation", 90);
 p.setPictureFormat(PixelFormat.JPEG);
 p.setPreviewSize(h, w);// here w h are reversed
 mCamera.setParameters(p);

と画像が縦長になります。

携帯電話のプレビューサイズと互換性の大きさでなければなりません。

SurfaceHolderあなたは、カメラの使用します usualy画面の解像度ます。

欲望2.2におかしいが動作していません... ここでは修正プログラムがあります:

   At surfaceCreated(..) or when you have this line
camera = Camera.open();
       add
camera.setDisplayOrientation(90);//only 2.2>

Camera.Parameters p = camera.getParameters();
    p.set("jpeg-quality", 100);
p.setRotation(90);
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(h, w);
camera.setParameters(p);

あなたは、この(2.2以下のために良い)を試すことができます。ここで私は、SDカードに保存する前に画像を回転させます。しかし、それは唯一のポートレートモード用です。あなたは、両方のモードのためにそれをしなければならなかったなら、あなたはカメラの向きを確認し、画像を撮影する前にいくつかのチェックを入れる必要があります。

PictureCallback jpegCallback = new PictureCallback() {
   public void onPictureTaken(byte[] data, Camera camera) {
      FileOutputStream outStream = null;
      try {
        imageFilePath = getFilename();
        InputStream is = new ByteArrayInputStream(data);
        Bitmap bmp = BitmapFactory.decodeStream(is);
        // Getting width & height of the given image.
        if (bmp != null){
           int w = bmp.getWidth();
           int h = bmp.getHeight();
           // Setting post rotate to 90
           Matrix mtx = new Matrix();
           mtx.postRotate(90);
           // Rotating Bitmap
           Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream);
           byte[] byteArray = stream.toByteArray(); 
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(byteArray);
           outStream.close();
        } else {
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(data);
           outStream.close();           
        }       

        preview.camera.startPreview();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    }
  }
};

がいこく現在のデバイスを含め、G1およびドロイド。の関連のバグ報告はこちら

まだコメントからのAndroidエンジニア(デイブ-)はこちら

ローマが問題スレッドの与えたリンクは、私が今使っていることを実行可能な解決策を持っています。

ここでそれを探します: http://code.google.com/p/android/issues /詳細?ID = 1193#C26

あなたが明示的にそれを行う必要があるまで、オリエンテーションのための任意のパラメータを設定する必要がする必要はありません。デフォルトでは、この機能をサポートしています。私が代わりに活性のために、カメラのプロパティのいずれかの方向を設定していないので、私はマニフェストファイル内の肖像画としての向きを設定し、私の場合、私は活動を持っており、その活動の上に私はカメラビューを持っています。今のアプリのルックスと作品良いです。いくつかのいずれかのために役に立つかもしれません..

感謝します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top