2016-03-25 7 views
2

私はSurfaceViewとGoogleのモバイルビジョンライブラリを使用しています。多くの端末でうまく見えますが、Nexus 7などのデバイスを数個使用すると、カメラの表示が横モードになります。それは正確に焦点を合わせて配置するのが難しいため、バーコードの読み取りなどが難しくなります。モバイルビジョンを使用したSurfaceviewは、ランドスケープでカメラを表示します。

私が検討したように、ハードウェアカメラを返すような方法はありません。そのため、カメラビューが風景を返すように管理できるため、ビューを動的に回転させて肖像画のように見せることができます。

Nexus 7などの端末でカメラやビューをポートレートに変更する方法があるかどうかを尋ねました。

何か助けが歓迎されます!ありがとう

+0

あなたは、このためのソリューションを見つけますか? –

答えて

0

多くのタブは、カメラが回転してマウントされているので、画像が実際よりも広い場合でも、水平に保持すると画像は「ポートレート」と見なされます。 私はしばらく前に構築したアプリで難しい方法を学びました。唯一の方法は、画面のアスペクトとイメージのアスペクトとイメージの回転を確認することでした。 これらを比較することで、カメラ画像が正しく回転しているかどうか、または回転後に90度回転する必要があるかどうかを判断できます。

0

私自身は、この人物からのアイデアを取得するためのソリューションは答えた: 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(); 
      } 
     } 
関連する問題