0

私は、Samsung Galaxy Tab (7 インチ) で開発中です。アプリケーションは縦向きモードのみである必要があります。つまり、アプリケーションとデバイス設定で縦向きモードにロックしています。問題は、カメラのプレビューを回転しようとすると、現在間違った方向に 90 度回転していることです。

今、これは私のsurfaceCreatedです

    public void surfaceCreated(SurfaceHolder holder) {
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);
        Camera.Parameters parameters = camera.getParameters();
        parameters.setPictureFormat(PixelFormat.JPEG);
        parameters.set("orientation", "portrait");
        //camera.setDisplayOrientation(90); 
        parameters.setRotation(90);
        camera.setParameters(parameters);
    }
    catch (IOException exception) {
        camera.release();
    }
}

camera.setDisplayOrientation(90) が機能していないようです (何もしないため、コメントを外しました)。ただし、parameters.setRotation(90) は実際にジョブを完了します! ただし、アプリケーションの側面に沿って「ちらつきのある色」の醜い「ストライプ」が作成されます。私はアンドロイドAPI 8(Froyo 2.2)を実行しているので、setDisplayOrientation()は私のために働くはずです!!

ローテーションの問題http://code.google.com/p/android/issues/detail?id=1193#c26に関連する問題についてのスレッドが Google にありますが、私の知る限りでは、私の知る限りでは何も示唆していません。問題。

この問題に関連するすべての解決策を大歓迎します! ありがとう!

4

3 に答える 3

1

これは、Samsung Galaxyタブでうまくいきました:

public void surfaceCreated(SurfaceHolder holder)
    {
    // The Surface has been created, acquire the camera and tell it where to draw.
    mCamera = Camera.open();

    Parameters params = mCamera.getParameters();

    if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
    {
    params.set("orientation", "portrait");
    mCamera.setDisplayOrientation(90);
    }

    try
    {
    mCamera.setPreviewDisplay(holder);
    }
    catch (IOException exception)
    {
    mCamera.release();
    mCamera = null;
    }

    }
于 2012-08-24T05:39:06.250 に答える
0

アプリケーションがポートレート写真のみを撮影するように設計されている場合、最も簡単な方法は、写真を撮影した後に画像データを回転することです。カメラの設定は気にしません。タブにバグがあるかどうかはわかりません (カメラのプレビューを回転させようとしたことはありません) が、ショットを撮った後に画像を回転させるのは非常に簡単です...問題は、どちらの方法を知る必要があるかだけです写真が撮られたとき、デバイスは保持されていました。それがあなたにとって問題ではない場合は、心配しないでください:)

于 2011-04-11T08:46:04.237 に答える
0

これを試して。このコードを作成し、Galaxy Tab でテストします。コードはうまく機能します

public void surfaceCreated(SurfaceHolder holder) {

    camera = Camera.open();

    try {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
        {                       
         camera.setDisplayOrientation(90);
        } else {
          Parameters parameters = camera.getParameters();
          parameters.setRotation(90);       
          camera.setParameters(parameters); 
        }

        camera.setPreviewDisplay(holder);
    } catch (IOException exception) {
        camera.release();
    }
}
于 2011-04-11T09:16:04.780 に答える