android - Nexus 5x 反向风景传感器在 Android 相机预览应用程序中修复

标签 android android-camera android-view android-camera2

我是 Android 开发的新手,所以如果我的问题微不足道,我提前道歉。在我的应用程序的一部分中,我需要实时预览我的后置摄像头,因此我创建了一个自定义类,它扩展了 SurfaceView 并实现了 SurfaceHolder.Callback(我基本上遵循了 android 文档中的说明)。

不幸的是,我正在 Nexus 5x 上测试我的应用程序,我刚刚意识到它以相反的方式安装了相机传感器。因此,在我的 Nexus 5x 上运行时,我的应用程序的相机预览会上下颠倒,这是我不想要的。

似乎新的 android.hardware.camera2 API 能够自动处理这个问题。最终我需要使用这个新的 API 更新我的所有代码,但现在我需要的是在使用旧相机 API 时快速修复。

所以我在那里阅读,我发现了一段代码,我需要在 SurfaceChanged 方法中引入它来解决这个问题。在这里:

Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

        if(display.getRotation() == Surface.ROTATION_0)
        {
            parameters.setPreviewSize(capHeight, capWidth);                           
            camera.setDisplayOrientation(90);
        }

        if(display.getRotation() == Surface.ROTATION_90)
        {
            parameters.setPreviewSize(capWidth, capHeight);                           
        }

        if(display.getRotation() == Surface.ROTATION_180)
        {
            parameters.setPreviewSize(capHeight, capWidth);               
        }

        if(display.getRotation() == Surface.ROTATION_270)
        {
            parameters.setPreviewSize(capWidth, capHeight);
            camera.setDisplayOrientation(180);
        }

        camera.setParameters(parameters);*/

        camera.startPreview();

问题是我没有看到有什么变化。

有什么想法吗?

最佳答案

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

来自 http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29

关于android - Nexus 5x 反向风景传感器在 Android 相机预览应用程序中修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35414141/

相关文章:

android - 使用 Cache Uri 作为 MediaStore.EXTRA_OUTPUT 时相机无法工作/保存

java - 拍照后不调用 onActivityResult

android - Android 中的实时摄像头流式传输

android - 当工作线程工作时,UI 变得不稳定

android - Eclipse 在 Window 上看不到我的 Android 设备。以前我一直工作正常

android - 如何在 Android 中从 pocketsphynx 释放麦克风

android - 如何高效地将 Android 位图转换为 Leptonica Pix?

android - fragment : what is the best place to measure Views?

android - 当前 ViewAnimator 的新替代品是什么?

android - removeAllViews Android 上的动画