2016-02-17 39 views
4

我正在開發一個在後臺使用相機預覽的android應用程序。它可以在不同的設備上正常工作。在我的Android應用程序Nexus 5X中,攝像頭視圖是顛倒的?

但是,當在Nexus 5X上測試時,相機預覽是顛倒的。 我在清單

<uses-permission android:name="android.permission.CAMERA" /> 

我的相機代碼使用這些權限是如下

public void startCamera(int myTexture) 
 
    { 
 
    surface = new SurfaceTexture(myTexture); 
 

 
    try { 
 
     camera = Camera.open(); 
 

 

 
    } catch (Exception e) { 
 
     Log.e("MainActivity", "failed to open Camera"); 
 
     e.printStackTrace(); 
 
    } 
 
    try 
 
    { 
 
     camera1.setPreviewTexture(surface); 
 
     camera1.startPreview(); 
 
    } 
 
    catch (IOException ioe) 
 
    { 
 
     Log.w("MainActivity","Camera launch failed"); 
 
    } 
 
    }

試過camera.setDisplayOrientation(180); 但沒有奏效。 請幫忙!

回答

4

this pro-tip中所述,您需要使用setDisplayOrientation()正確旋轉預覽以匹配設備方向。

從文檔(這將應用於Nexus 5X作品)的完整代碼是:

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); 
} 
+2

在我的Nexus 5X預覽的紫外線y是向左旋轉(90)。以上代碼在我的Nexus 5x上因某種原因不起作用。我從我的CameraInfo旋轉= 0,所以最終結果也是0,但相機翻轉90度。 – George

+0

不適用於我。 – RobotRock

+0

不適合我。 – nnn

0

由於您使用的是表面紋理,你將不得不自己處理的旋轉。正如在documentation記載的方法不影響字節的順序:

這不會影響在 onPreviewFrame(字節[],攝像機)通過字節數組,JPEG圖像,或錄製的視頻的順序。

也就是說你可以直接在GPU上手動旋轉字節,在OpenGL紋理上執行動作。需要注意的是旋轉180°等效於一次垂直翻轉字節,並且一旦水平,這基於OpenGL意味着可以:

  • 旋轉180°的平面繪製紋理照相機
  • 量表由-1 x和平面繪製相機質感
  • 更改相機平面
相關問題