android-摄像机预览是横向的。

android-摄像机预览是横向的。

我使用预览来显示相机在屏幕上看到的内容。

我可以让所有的工作精细,表面创建,表面集和表面显示。

然而,在纵向模式下,它总是以不正确的90度角显示图片。

我知道,使用以下代码可以使图片变得清晰:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但是,我在一个包含其他元素的活动中有预览视图,我的活动在景观模式下显示是没有意义的。(默认情况下是禁用的)

所以我想知道有没有改变预览的方向?让我剩下的活动正确地显示在肖像模式下?

还是要旋转预览以使其正确显示?


智慧大石
浏览 671回答 3
3回答

慕村225694

这个问题似乎是从某些硬件的缺陷开始的。看这里但是,可以通过调用API 8中可用的mCamera.setDisplayOriation(DIED)来克服这一问题。public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {                 if (isPreviewRunning) {         mCamera.stopPreview();     }     Parameters parameters = mCamera.getParameters();     Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();     if(display.getRotation() == Surface.ROTATION_0) {         parameters.setPreviewSize(height, width);                                    mCamera.setDisplayOrientation(90);     }     if(display.getRotation() == Surface.ROTATION_90) {         parameters.setPreviewSize(width, height);                                }     if(display.getRotation() == Surface.ROTATION_180) {         parameters.setPreviewSize(height, width);                    }     if(display.getRotation() == Surface.ROTATION_270) {         parameters.setPreviewSize(width, height);         mCamera.setDisplayOrientation(180);     }     mCamera.setParameters(parameters);     previewCamera();                      }And the previewCamera method :public void previewCamera() {             try {                    mCamera.setPreviewDisplay(mSurfaceHolder);                   mCamera.startPreview();         isPreviewRunning = true;     } catch(Exception e) {         Log.d(APP_CLASS, "Cannot start preview", e);         }}这是HTC的愿望,我必须首先在每次轮转检查中输入日志语句,以说明旋转是什么,然后在设备上调试,并在我旋转设备时观看logcat输出。对于宏达电的愿望,0是手机,如你所期望的(肖像),90度是逆时针转动手机90度(我原以为它会顺时针方向)。在代码中,您将看到,我不需要做任何显示旋转时,手机是在90或180度-设备似乎处理这一点本身。只有一个点不能正常工作:270度旋转是当你把设备顺时针旋转90度,显示旋转计数器正常,但如果你逆时针旋转270度,它似乎没有适当地补偿它。注意在适当的旋转中宽度和高度的偏移。

30秒到达战场

尝试设置显示方向。它解决了我的问题。 mCamera.setDisplayOrientation(90);

ITMISS

 public void surfaceCreated(SurfaceHolder holder) {      mCamera = Camera.open();      mCamera.setDisplayOrientation(90);      try {          mCamera.setPreviewDisplay(holder);          mCamera.setPreviewCallback(new PreviewCallback() {              @Override              public void onPreviewFrame(byte[] data, Camera camera) {              }          });      } catch (Exception e) {          e.printStackTrace();      }}试试这段代码
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android