5

Androidタブレット用にコーディングしていますが、アプリでsurfaceViewカメラプレビューのポートレートビューを使用したいと考えています。デフォルトでは横向きです。次のコードを試して、縦向きに回転させました。

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 we aren't landscape (the default), tell the camera we want portrait mode
  if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE){
    params.set("orientation", "portrait"); // "landscape"
    // And Rotate the final picture if possible
    // This works on 2.0 and higher only
    //params.setRotation(90);
    // Use reflection to see if it exists and to call it so you can support older versions
      try {
        Method rotateSet = Camera.Parameters.class.getMethod("setRotation", new Class[] { Integer.TYPE } );
        Object arguments[] = new Object[] { new Integer(270) };
        rotateSet.invoke(params, arguments);
      } catch (NoSuchMethodException nsme) {
        // Older Device
        Log.v("CameraView","No Set Rotation");
      } catch (IllegalArgumentException e) {
        Log.v("CameraView","Exception IllegalArgument");
      } catch (IllegalAccessException e) {
        Log.v("CameraView","Illegal Access Exception");
      } catch (InvocationTargetException e) {
        Log.v("CameraView","Invocation Target Exception");
      }
  }
  mCamera.setParameters(params);
  try{
    mCamera.setPreviewDisplay(holder);
  } catch (IOException exception) {
    mCamera.release();
    mCamera = null;
  }
}

しかし、それは機能しません。誰か修正してもらえますか?

4

1 に答える 1

7

setDisplayOrientationこの関数を次のように使用することをお勧めします。

public void surfaceCreated(SurfaceHolder holder) {
    if (Build.VERSION.SDK_INT >= 8) mCamera.setDisplayOrientation(90);
}

カメラの使用はparams.set("orientation"...デバイス間で一貫性がなく、実際には SDK 8 より前の言語です。

于 2012-08-27T20:19:52.993 に答える