2013-03-12 15 views
13

Cihaz Nexus 4 Android ver: 4.2.2Nexus 4 Kamera önizleme boyutu Oran her zaman 16x9 yüzey görünümü gerektirir? Neden

Nexus 4 aşağıdaki önizleme boyutlarını destekler .... başkası bu bulmuştur ve nasıl çözüleceğini açıklayabilir umut: -

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() onları ayarlar ve myCamera.getPreviewSize() yöntemini çağırdığımda, doğru ayarlanmış olanı seçerim, AMA .... Yüzey görünümümü kamera önizlemimle aynı boyutta ayarlarsam Gerilmiş bir görüntü elde ediyorum. Örneğin.

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

Yalnızca Yüzey görünümümü 16x9 olarak ayarladığımda (1.77777) mükemmel bir görüntü elde edersem.

Surface view (1280,720) -> Perfect image 

Bu sorunla karşılaştığım tek aygıt budur. Tam ekran modu için eksik olduğum bir kamera ayarı ya da çalışmayı durduran bir şey varsa lütfen birisini bilgilendirin. benim uzun arayışı içinde

Ben 1 diğer bu konuya da ilgilidir yazı değil, bir cevap, benim sorunun sadece biraz daha fazla kanıt PictureCallback not called unless using supportedsizes[0]

Teşekkür

+0

Dostum! Bende aynı sorun var. Bu konuda iki gün geçirdim ve neden hala gerilmiş bir resim oluşturduğunu bilmiyorum – pintaf

cevap

0

boyutunu ayarlamayı deneyin bulundu senin Yüzey görünümü, kullandığınız kamera parametrelerinin oranına göre.

3

Bu yöntem, her aygıt için en iyi (benim için) ekran boyutunu hesaplar. Ancak, Nexus 4'te bu kodu denediğimde sizin gibi aynı problemim var. Bu nedenle, çözümüm, nexus 4'ün genişliğini alan ve bunun için en yüksek yüksekliği hesaplayan bu yöntemin sonunda özel bir duruma sahip olmaktır. cihaz.

Son durum tüm cihazlarda kullanılabilir. Yöntemin ilk bölümünü silebilirsiniz. Nexus 4 günü

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

, bir resim çekmek asla bile, önizleme boy oranı ve hareketsiz görüntü boy oranı birbirine bağlanmış talihsiz bir sorun var. Eşleşmezlerse, ikisinden biri çarpık olur (genellikle daha düşük çözünürlük olduğundan önizleme yapar).

4: 3 önizleme kullanmak isterseniz, önizlemeyi başlatmadan önce hareketsiz görüntü boyutunu 4: 3 olacak şekilde yapılandırın. Örneğin, N4'te tam 8MP resim boyutuyla (3264 x 2448) 640x480 önizleme, önizleme için uzaya neden olmamalıdır. Resim boyutunu seçmek için Camera.Parameters.setPictureSize kullanın; Mevcut boyutların listesi Camera.Parameters.getSupportedPictureSizes'dan okunabilir.

+0

Bu, tüm nexus modellerinde bir sorun gibi görünüyor. –

+0

hem @Eddy Talvala 'nın ve beni önerileri benim sorunumu düzeltmeme yardımcı oldu. Teşekkür ederim. Ayrıca bu soruyu sorduğum için teşekkürler. –

İlgili konular