2013-03-12 6 views
13

デバイスNexus 4の アンドロイド版:他の誰かがこれを発見したと、それを解決する方法を説明することができます願って4.2.2Nexus 4カメラのプレビューアスペクト比は常に16x9のサーフェイスビューが必要ですか?なぜ

....

ネクサス4は、以下のプレビューサイズをサポート: -

W:1280 H:720 Ratio: 1.777777 
W:800 H:480 Ratio: 1.6666666 
W:768 H:432 Ratio: 1.7777778 
W:720 H:480 Ratio: 1.5 
W:640 H:480 Ratio: 1.3333334 
W:576 H:432 Ratio: 1.3333334 
W:480 H:320 Ratio: 1.5 
W:384 H:288 Ratio: 1.3333334 
W:352 H:288 Ratio: 1.2222222 
W:320 H:240 Ratio: 1.3333334 
W:240 H:160 Ratio: 1.5 
W:176 H:144 Ratio: 1.2222222 

myCamera.setPreviewSize()を設定し、myCamera.getPreviewSize()を呼び出すと、設定した正しいものが取得されますが、BUT ...私のカメラビューと同じサイズにサーフェスビューを設定すると私は伸ばした画像を得る。例えば

setPreviewSize(640,480) 
getPreviewSize -> I get 640,480 
Surface view (640,480) -> Stretched image 

表面ビューを16x9(1.77777)に設定しても、完全な画像が得られます。

Surface view (1280,720) -> Perfect image 

これは私がこの問題を抱えている唯一のデバイスです。私はフルスクリーンモードやこれが動作しなくなる何かに欠けているカメラ設定がある場合、誰かに助言してください。

は私の長い検索では、私は、答えは私の問題のほんの少しより多くの証拠を、この問題にも関する1つの他のポストを見つけましたが、ない PictureCallback not called unless using supportedsizes[0]

おかげ

+0

Dude !!私はここで同じ問題があります。これで2日を費やしました。なぜそれが伸びた画像を作り出すのかまだ分かりません。 – pintaf

答えて

0

は、あなたのサイズを設定してみてください使用しているカメラパラメータの比率に基づくサーフェスビューです。

3

この方法では、各デバイスの最適な(私にとっては)画面サイズを計算します。しかし、私はNexus 4でこのコードを試してみたときに同じような問題があります。だから、私の解決策は、このメソッドの最後にネクサス4の幅を取得し、デバイス。

最後のケースは、すべてのデバイスで使用できます。メソッドの最初の部分を削除することができます。 Nexus 4のオン

private void setAspectResolutionCamera(Parameters camParams, int screen_width, int screen_height) { 
    boolean chosen_one_resolution = false; 

    //Init screen sizes 
    width_video = ConstantsCamera.VIDEO_ASPECT_WIDTH; 
    height_video = ConstantsCamera.VIDEO_ASPECT_HEIGHT; 

    float aspect_ratio = 1f; 
    int aspect_width = 6000, aspect_height = 6000; 
    List<Size> supported_sizes_list = camParams.getSupportedPreviewSizes(); 
    for (int i = 0; i < supported_sizes_list.size(); i++) { 
     Size size = supported_sizes_list.get(i); 

     float aspect = (float) size.height/size.width; 
     if (ConstantsCamera.VIDEO_ASPECT_RATIO - aspect <= aspect_ratio && (aspect - ConstantsCamera.VIDEO_ASPECT_RATIO >= 0)) { 

      if (screen_width - size.height <= aspect_width && size.height - screen_width >= 0) { 

       if (screen_height - size.width < aspect_height) { 
        height_video = size.width; 
        width_video = size.height; 
        aspect_ratio = ConstantsCamera.VIDEO_ASPECT_RATIO - (float) size.height/size.width; 
        aspect_width = screen_width - size.height; 
        aspect_height = screen_height - size.width; 

        chosen_one_resolution = true; 


       } 
      } 
     } 
    } 

    //Special case 
    if (width_video != screen_width && !chosen_one_resolution) { 
     height_video = screen_width * height_video/width_video; 
     width_video = screen_width; 

    } 
} 
7

は、あなたが写真を撮ることがない場合でも、プレビューのアスペクト比と静止画の縦横比が一緒に接続されている不幸な問題があります。一致しない場合は、2つのうちの1つが歪んで表示されます(一般にプレビューは解像度が低いためです)。

プレビューを開始する前に、4:3プレビューを使用する場合は、静止画のサイズを4:3に設定します。たとえば、N4で8MPの画像サイズ(3264 x 2448)の640x480プレビューでは、プレビューに伸縮が発生しません。

Camera.Parameters.setPictureSizeを使用して画像のサイズを選択します。利用可能なサイズのリストはCamera.Parameters.getSupportedPictureSizesから読み取ることができます。

+0

これはすべてのnexusモデルの問題であるようです。 –

+0

@Eddy Talvalaとbeniの提案の両方が私の問題を解決する助けになりました。ありがとうございました。また、この質問をしてくれたIainに感謝します。 –

関連する問題