【问题标题】:Surfaceview using Mobile Vision Displays the Camera in Landscape使用 Mobile Vision 的 Surfaceview 以横向显示相机
【发布时间】:2016-07-12 22:56:17
【问题描述】:

我正在使用 SurfaceView 和 Google 的 Mobile Vision 库。对于许多设备来说,它看起来不错,但是当与 Nexus 7 等少数设备一起使用时,相机视图会进入横向模式。这使得扫描条形码等变得困难,因为它难以正确聚焦和定位。

在我探索过的 Vision 库中,没有任何方法可以让它们返回硬件摄像头,因此我们可以管理方向,例如如果摄像头视图返回横向,那么我们可以动态旋转视图以使其看起来像纵向。

所以想问一下 Nexus 7 等设备是否可以将相机或视图更改为纵向。

欢迎任何帮助!谢谢

【问题讨论】:

  • 您找到解决方案了吗?

标签: android android-camera barcode-scanner android-vision


【解决方案1】:

许多选项卡的摄像头安装在旋转位置,因此当水平握持时,即使图像实际上比高度宽,照片也会被拍摄为“纵向”。 在我前段时间构建的一个应用程序上,我很难学会它。唯一的方法是检查屏幕方面与图像方面和图像旋转。 通过比较这些,您可以推断出相机图像是否旋转正确,或者是否需要后旋转 90 度。

【讨论】:

    【解决方案2】:

    我找到了一个解决方案,让自己从这个人的回答中得到一个想法: https://stackoverflow.com/a/41634379/5028531

    所以我做了什么:

            cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                    try {
    
                        cameraSource.start(cameraPreview.getHolder());
                        Field[] declaredFields = CameraSource.class.getDeclaredFields();
    
                        for (Field field : declaredFields) {
                            if (field.getType() == Camera.class) {
                                field.setAccessible(true);
                                try {
                                    Camera camera = (Camera) field.get(cameraSource);
                                    if (camera != null) {
                                        Camera.Parameters params= camera.getParameters();
                                        camera.setDisplayOrientation(0);
                                    }
                                } catch (IllegalAccessException | RuntimeException e) {
                                    e.getMessage();
                                }
    
                                break;
                            }
                        }
                    } catch (IOException e) {
                        Log.e("CAMERA SOURCE", e.getMessage());
                        e.printStackTrace();
                    }
                } else {
                    Log.w("CAMERA SOURCE", "Permission not granted");
                    Toast.makeText(getActivity(), "Camera permission denied", Toast.LENGTH_SHORT).show();
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2013-06-25
      相关资源
      最近更新 更多