2017-05-12 5 views
1

カメラのプレビューを表示するとストレッチするので、何かを検索して見つけました。しかし、それはうまくいかない。表示プレビューにはsurfaceViewを使用しています。 ここに私が使用しているコードがあります。アンドロイドでカメラの最適なプレビューサイズを取得

getOptimalPreviewSize

private Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes, int w, int h) { 
    final double ASPECT_TOLERANCE = 0.1; 
    double targetRatio=(double)h/w; 

    if (sizes == null) return null; 

    Camera.Size optimalSize = null; 
    double minDiff = Double.MAX_VALUE; 

    int targetHeight = h; 

    for (Camera.Size size : sizes) { 
     double ratio = (double) size.width/size.height; 
     if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
     if (Math.abs(size.height - targetHeight) < minDiff) { 
      optimalSize = size; 
      minDiff = Math.abs(size.height - targetHeight); 
     } 
    } 

    if (optimalSize == null) { 
     minDiff = Double.MAX_VALUE; 
     for (Camera.Size size : sizes) { 
      if (Math.abs(size.height - targetHeight) < minDiff) { 
       optimalSize = size; 
       minDiff = Math.abs(size.height - targetHeight); 
      } 
     } 
    } 
    Log.i(TAG, "width = "+ optimalSize.width +" height = "+ optimalSize.height); 
    return optimalSize; 
} 

はログイン

surfaceChanged : width = 720 height = 1134 

    optimalPreviewSize width = 800 height = 480 

あなたは両方を見たよう

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
    Log.i(TAG, "surfaceChanged : width = "+width +" height = "+height); 
    if (mSupportedPreviewSizes != null) { 
     Log.i(TAG, "mSupportedPreviewSizes"); 

     // Get Optimal Preview Size 
     mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes, width, height); 

     // Setting the optimal preview for best result 
     if(mPreviewSize != null) { 
      Log.i(TAG, "Activate Optimal Preview"); 
      Camera.Parameters parameters = mCamera.getParameters(); 
      parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); 
      mCamera.setParameters(parameters); 
      mCamera.startPreview(); 
     } 

    }h 
} 

をsurfaceChanged widthheightは同じではありません。なぜこのプレビューは良いプレビューではないと思います。私はこれのために何ができますか?私はアンドロイドで新しいです。

+0

を見つけることができます

targetHeight = Math.min(w, h) 

を修正します。カスタムカメラのための最高のライブラリ。私はさまざまなデバイスとカメラのプレビューでストレッチしないでテストしました。 https://github.com/google/cameraview –

答えて

1

私はバグを見つけた:

if (Math.abs(size.height - targetHeight) < minDiff) { 

カメラプレビューのサイズが横長レイアウトサイズです。だからsize.heightは実際にはデバイスの幅です。しかし、targetHeightはビューの高さです(通常、ビューはデバイスサイズです)。 は、あなたが私はこのライブラリを好適なカスタムカメラのためのGoogleのデモコードGoogleDemoCode

関連する問題