【问题标题】:Android emulator camera - webcam orientationAndroid 模拟器相机 - 网络摄像头方向
【发布时间】:2017-09-22 04:02:02
【问题描述】:

我正在使用我的 Mac 网络摄像头在模拟器中模拟 Android 前置摄像头。不幸的是,相机似乎是横向的 - screenshot,即使模拟器是纵向的。

请注意,相机在真实设备上的行为正常(即它具有纵向)。

我的模拟器配置: Nexus 5X,Android Nougat 7.1.1,API 级别 25,启动方向:纵向,前置摄像头:webcam0,后置摄像头:Emulated

如何以正确的方向使用网络摄像头?

【问题讨论】:

  • 你用的是什么类型的模拟器?
  • Nexus 5X,Android Nougat 7.1.1 x86,启动方向:纵向,API 级别 25,摄像头:正面:webcam0,背面:模拟
  • 您是否尝试添加到您的相机应用程序 camera.setDisplayOrientation(90); ?
  • 不。不过,它在真实设备上表现正常。
  • 我正在使用不支持 setDisplayOrientation 的 Camera2 API。

标签: android android-emulator android-camera android-orientation


【解决方案1】:

最终我通过检测我是否在模拟器中运行解决了这个问题:

public static boolean isEmulator() {
  return Build.FINGERPRINT.startsWith("generic")
    || Build.FINGERPRINT.startsWith("unknown")
    || Build.MODEL.contains("google_sdk")
    || Build.MODEL.contains("Emulator")
    || Build.MODEL.contains("Android SDK built for x86")
    || Build.MANUFACTURER.contains("Genymotion")
    || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
    || "google_sdk".equals(Build.PRODUCT);
}

然后对预览纹理应用变换:

Matrix matrix = new Matrix();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point displaySize = new Point();
display.getRealSize(size);
RectF viewRect = new RectF(0, 0, mCameraPreview.getWidth(), mCameraPreview.getHeight());
float centerX = viewRect.centerX();
float centerY = viewRect.centerY();
float scale = (float) mCameraPreview.getWidth() / (float) displaySize.x;
matrix.postScale(scale, scale, centerX, centerY);
matrix.postRotate(270, centerX, centerY);
mCameraPreview.setTransform(matrix);

【讨论】:

    【解决方案2】:

    我在模拟器上启用了自动旋转,然后将模拟器切换到横向模式,它工作了。

    【讨论】:

    • 这在我的情况下不起作用。通过这个技巧,我设法将相机从预期的方向(倒置)旋转了 180 度,但不是正确的方向:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多