2015-11-09 39 views
0

我知道这个问题已经存在,但没有解决。我采取了一些帮助,并找出了我需要根据显示改变相机的基本代码。Android中的显示不能改变摄像头方向?

cameraInfo=new Camera.CameraInfo(); 
       camera.getCameraInfo(camId,cameraInfo); 
       int angle=0; 
       int rotation = getActivity().getWindowManager().getDefaultDisplay() 
         .getRotation(); 
       switch(rotation) 
       { 
        case Surface.ROTATION_0: 
         parameters.setPreviewSize(s.width, s.height); 
         Log.i(TAGR, "THE ROATTION IS 0"); 
         camera.setDisplayOrientation(90); 
         break; 
        case Surface.ROTATION_90: 
         parameters.setPreviewSize(s.width, s.height); 
         Log.i(TAGR, "THE ROATTION IS 90"); 
         camera.setDisplayOrientation(0); 

         break; 
        case Surface.ROTATION_180: 
         parameters.setPreviewSize(s.width, s.height); 
         Log.i(TAGR, "THE ROATTION IS 180"); 
         camera.setDisplayOrientation(0); 

         break; 
        case Surface.ROTATION_270: 
         parameters.setPreviewSize(s.width, s.height); 
         Log.i(TAGR, "THE ROATTION IS 270"); 
         camera.setDisplayOrientation(180); 
         break; 
        default: 
         camera.setDisplayOrientation(0); 
         break; 
       } 

      } 

但是,我无法获得有关设备旋转的正确显示预览。我尝试了几种不同的角度组合。但是,没有人给我正确的输出。我附上我的预览图像。请解释问题的解决方案。此外,我想知道我的设备的位置对应角度0,90,180和270.换句话说,0对应于纵向还是横向?

图片: 在这一个景观是倒置的。我试着在ROTATION_180时将旋转设置为180。这样做并没有解决,因为其他方向(在风景中)变成了倒立The landscape in this orientation is inverted

颠倒的方向没有做任何事情。所需的结果是使用正确的预览按下按钮。我不知道为什么这不起作用。我在每次轮换中尝试了几个值,但没有解决这个问题。

This is the upside down orientation of my phone

我是初学者,所以请详细解释。谢谢。

+0

但是,为什么你用这个?用于显示照片? –

+0

这是倒置的相机预览。在我的应用程序中,我有一个照相机按钮来设置照片。所以,问题在于预览。 –

+0

试试ExifInterface。 –

回答

1

您应该检查设备的CameraInfo.orientation。请注意,此属性给出自然显示方向的旋转,由设备给出Display.getRotation()

如果您的自定义相机应用使用android.hardware.camera2 API,则此补偿将自动发生。

如果您的自定义相机活动不会锁定屏幕方向,那么这将是受“逆景观”毛刺,需要special treatment涉及OrientationEventListener

+0

完美地工作倒转的部分。然而,颠倒的部分仍然存在相同的问题。我尝试调试并更改预览值。当我提出不同的价值观时,它正在改变。所以,我认为预览很好。例如,当旋转角度为270°时,我放置了90°。结果,我的颠倒方向与我的风景方位(相当于180°)相反。我不明白这个方向有什么问题。你能解释一下吗?非常感谢您的帮助我 –

+0

您的** AndroidManifest.mk **中是否包含'android:screenOrientation =“fullSensor”'? –

+1

哈哈!只是做到了这一点,它像一个魅力。我以前有过这个“完整的感应器”,但是当我再次检查时,它不在那里。非常感谢你帮助我! –

0

您可以预览之前,像这样旋转图像:

public static Bitmap rotateImage(Bitmap bitmapSrc) { 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(previewRotation); 
    return Bitmap.createBitmap(bitmapSrc, 0, 0, 
      bitmapSrc.getWidth(), bitmapSrc.getHeight(), matrix, true); 
} 

“previewRotation” 可以从得到:

private static void setCameraDisplayOrientation(Context mContext, android.hardware.Camera.CameraInfo info) { 
    int rotation = ((CameraActivity) mContext).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; 
    } 

    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
     previewRotation = (info.orientation + degrees) % 360; 
     previewRotation = (360 - previewRotation) % 360; // compensate the mirror 
    } else { // back-facing 
     previewRotation = (info.orientation - degrees + 360) % 360; 
    } 
    mCameraInstance.setDisplayOrientation(previewRotation); 
}