2015-11-09 49 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); 
}