Android相机旋转

我有一个摩托罗拉Defy操作系统Android 2.1,我用相机预览应用程序。 问题是,相机在Android 2.1上的三星Galaxy S工作正常,但在摩托罗拉相机旋转90度。 我试图做到这一点:

Parameters parameters = camera.getParameters(); parameters.setRotation(90); 

但它不工作。 我还没有find任何解决scheme。

Solutions Collecting From Web of "Android相机旋转"

 if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { camera.setDisplayOrientation(90); lp.height = previewSurfaceHeight; lp.width = (int) (previewSurfaceHeight / aspect); } else { camera.setDisplayOrientation(0); lp.width = previewSurfaceWidth; lp.height = (int) (previewSurfaceWidth / aspect); } 

现在在Android文档中有一个正式的示例代码(在setDisplayOrientation()下):

 public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) { android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(cameraId, info); int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } camera.setDisplayOrientation(result); } 

camera.setDisplayOrientation(int)在2.1下不存在!

而这个代码可能工作,但在我的里程碑/ droid 🙁

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

您可以在http://code.google.com/p/android/issues/detail?id=1193#c42中看到更多内容

我发现这个代码适用于Android 1.6及以上版本(适用于2.1版本,而在纵向模式下无需旋转即可使用)

 public void surfaceCreated(SurfaceHolder holder){ try{ camera = Camera.open(); setDisplayOrientation(camera, 90); camera.setPreviewDisplay(holder); camera.startPreview(); }catch(IOException e){ Log.d("CAMERA", e.getMessage()); } } protected void setDisplayOrientation(Camera camera, int angle){ Method downPolymorphic; try { downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class }); if (downPolymorphic != null) downPolymorphic.invoke(camera, new Object[] { angle }); } catch (Exception e1) { } } 

AndroidManifest.xml上的activity有android:screenOrientation =“portrait”

http://code.google.com/p/android/issues/detail?id=1193#c42

 public static void setCameraDisplayOrientation(Activity activity, int cameraId,android.hardware.Camera camera) { android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(cameraId, info); int rotation = activity.getWindowManager().getDefaultDisplay() .getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } camera.setDisplayOrientation(result); } 

我认为你不能做任何设置来支持API 2.2到2.1。 该API没有在您当前的设备库中。 您必须更改为2.2以支持API级别8.顺便说一句,我也尝试使用API​​级别7:

 Parameters parameters = camera.getParameters(); parameters.setRotation(90); 

这个function适用于三星Galaxy Tab,但Nexus一。 Samsung Galaxy Tab使用OS 2.2.0,Nexus one使用OS 2.2.1。 当我尝试使用API​​级别8时:

 camera.setDisplayOrientation(90); 

他们两个都很好。 所以我认为在Android OS 2.2.1上使用API​​级别7有问题。