6

GoogleのAndroid Vision APIのバーコードリーダーの例を使用しています。 プレビューサイズが利用可能なスペース全体を満たしていないようです(Nexus 4を使用していて、プレビューの右側に白い未使用スペースがあり、幅の約1/3)。バーコードスキャナのプレビューサイズをvision api

私はさまざまなデバイスでこの例を実行し、常に利用可能なスペース全体をいっぱいにしたいと考えています。

だから私はでプレーしてきたビットは次のとおりです。

CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector).setFacing(CameraSource.CAMERA_FACING_BACK).setRequestedPreviewSize(?, ?).setRequestedFps(15.0f); 

任意のアイデア?

ありがとうございます!あなたはこのスレッドを見てかかることがあります

+0

私は同じ問題に直面しています。ソリューションを提供してください。既にgithubスレッドを通過しましたが、検出領域を制限する方法はありませんでした。 – Madhu

答えて

10

だけ削除するか、コードの下にコメントCameraSourcePreviewクラスから

if (childHeight > layoutHeight) { 
    childHeight = layoutHeight; 
    childWidth = (int)(((float) layoutHeight/(float) height) * width); 
} 

を、代わりにこのループで「CameraSourcePreview」クラスのchildHeightのlayoutHeightを使用する - ために(I = 0 int型、I <のgetChildCount(); ++ I){...}

if (mCameraSource != null) 
    { 
     Size size = mCameraSource.getPreviewSize(); 
     if (size != null) 
     { 
      width = size.getWidth(); 
      height = size.getHeight(); 
     } 
    } 

    // Swap width and height sizes when in portrait, since it will be rotated 90 degrees 
    if (isPortraitMode()) 
    { 
     int tmp = width; 

     //noinspection SuspiciousNameCombination 
     width = height; 
     height = tmp; 
    } 

    final int layoutWidth = right - left; 
    final int layoutHeight = bottom - top; 

    // Computes height and width for potentially doing fit width. 
    int childWidth = layoutWidth; 
    int childHeight = (int) (((float) layoutWidth/(float) width) * height); 

    for (int i = 0; i < getChildCount(); ++i) 
    { 
     getChildAt(i).layout(0, 0, childWidth, layoutHeight); 
    } 

    try 
    { 
     startIfReady(); 
    } 
    catch (SecurityException se) 
    { 
     Log.e(TAG, "Do not have permission to start the camera", se); 
    } 
    catch (IOException e) 
    { 
     Log.e(TAG, "Could not start camera source.", e); 
    } 
} 
+1

これは技術的には機能しますが、2つの発言があります。 1:現在はlayoutWidthとlayoutHeightのみを使用しています。ほとんどのコードを削除できます。 2:このメソッドはビデオを伸ばし、アスペクト比は保持しません。 –

+0

カメラプレビューのサイズを比率で指定して固定しました。 小さいサイズのカメラプレビューが必要なので –

4

カメラ画像を埋めるようにする2つの方法があります画面全体。

  1. Akesh Dubey's answerであり、レイアウトの幅と高さに合わせて画像全体を表示します。ただし、アスペクト比は保持されません。
  2. 以下の私の答えは、アスペクト比を犠牲にすることなくイメージを収縮させるためのイメージです。

イメージをクロップフィットするには、><に変更するだけです。以下のif文を探して、条件を変更してください。

if (childHeight < layoutHeight) { 
    childHeight = layoutHeight; 
    childWidth = (int)(((float) layoutHeight/(float) height) * width); 
} 
+0

作業しました!どうもありがとう!! –

+0

あなたの解決策は私が見た他のどの方法よりも優れています(もっと簡単です...)。いずれにしても(ストレッチやクロッピング)問題はまだありますが、QRコードスキャナーの場合は、クロッピングがはるかに優れていると言えます。 – Keysaw

関連する問題