在SurfaceView上的肖像的Android相机

我尝试了几件事情,试图让相机预览显示在一个SurfaceView肖像。 没有工作。 我正在testing一个2.0.1的Droid。 我试过了:

1)通过以下this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);将布局强制为纵向: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2)使用

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

有什么我可以尝试吗? 如果这是Android或手机中的一个错误,我怎么能确定这是事实,以便我有证据通知客户?

谢谢,Prasanna

截至API第8版,这是可用的:

public final void setDisplayOrientation(int degrees)

即清单中的门户:

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

我有一个肖像模式在2.1(在Desiretesting)工作的解决scheme可能更less。

活动屏幕方向设置为纵向。 (机器人: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 wh are reversed mCamera.setParameters(p); 

和图像将是肖像。

您用于相机的SurfaceHolder必须与手机预览大小惯用的屏幕分辨率兼容。

有趣的欲望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和Droid。 看看这里的相关错误报告:

另请参阅Android工程师(Dave)的评论:

罗马给出的问题线程的链接有一个可行的解决scheme,我现在正在使用。

在这里find它: http : //code.google.com/p/android/issues/detail?id=1193#c26

没有必要为取向设置任何参数,直到需要明确执行。 默认情况下,它支持这个function。 在我的情况下,我有一个活动和以上的活动,我有一个相机视图,所以我没有设置任何方向的相机属性,而不是活动我设置方向为清单文件中的肖像。 现在的应用程序看起来和工作良好。 可能对某个人有帮助..

谢谢。