2011-11-03 26 views
11

Kullanılabilir kamera görüntü boyutlarını almaya çalışıyorum, böylece kamerayı tercih ettiğim görüntü çözünürlüğüne ayarlayabiliyorum.Android camera desteklenen resim boyutları

camera=Camera.open(); 
Parameters params = camera.getParameters(); 
List sizes = params.getSupportedPictureSizes(); 
for (int i=0;i<sizes.size();i++){ 
    Log.i("PictureSize", "Supported Size: " +sizes.get(i));   
} 

Bu bana bir boyuta çevirmek nasıl emin değilim şu çıktıyı verir:

ben aşağıdaki kodu kullandım Android kamera boyutunu almak için. Herkes bana çıktı anlamalarına yardımcı olsaydı

"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 
"Supported size: [email protected]" 

o bana teşekkür çok yardımcı olacaktır!

Düzenleme:

camera=Camera.open(); 
Parameters params = camera.getParameters(); 
List sizes = params.getSupportedPictureSizes(); 
Camera.Size result = null; 
    for (int i=0;i<sizes.size();i++){ 
     result = (Size) sizes.get(i); 
     Log.i("PictureSize", "Supported Size. Width: " + result.width + "height : " + result.height); 
    } 

cevap

11

getSupportedPictureSizes() bir ListCamera.Size nesneleri döndürür: Ben aşağıdakileri yaparak benim problem çözme sona erdi. Camera.Size, desteklenen resim boyutunun yüksekliğini ve genişliğini size bildiren height ve width veri üyelerine sahiptir. SurfaceView boyutundan daha küçük olan en büyük alana sahip önizleme boyutunu bulmak için ilgili getSupportedPreviewSizes() numarasını kullanan Here is a sample project

+0

Teşekkür şimdi benim sorun çözüldü. Bir şekilde, getSupportedPictureSizes() öğesini çağırarak Camera.Size nesnelerini alabileceğimi özlemiştim. Örnek proje harikaydı. –

+0

CommonsWare, projenizde resim boyutunu ayarlamıyorsunuz - merak ettiğim resim boyutunu ayarlamak bile gerekli mi? Çünkü, çok çeşitli farklı cihazları destekleyen ve önizleme ile resim boyutunu senkronize halde tutarak ve en boy oranı nedeniyle çok küçük olmalarına izin vermemekte ciddi sorunlara yol açıyor. – AgentKnopf

+0

@Zainodis: "projenizde resim boyutunu ayarlamıyorsunuz" - söz konusu örnek resim çekmiyor. Sadece önizlemeyi ayarlar. “Acaba resim boyutunu ayarlamak bile gerekli mi?” - Bir varsayılan var, ama ben her zaman bir tane ayarladım."Çünkü bana farklı cihazların geniş bir yelpazede desteklenmesi ve önizleme ve resim boyutunun senkronize halde tutulması ve en-boy oranından dolayı çok küçük olmalarına izin vermemek gibi ciddi sorunlara yol açıyor" - Bazıları ile uğraşırken acıyı hissediyorum CWAC-Camera yardımcı kitaplığımda. – CommonsWare

5
Camera camera = Camera.open(); 
Parameters params = camera.getParameters(); 
List sizes = params.getSupportedPictureSizes(); 
for (int i=0;i<sizes.size();i++) { 
    Log.i("PictureSize", "Supported Size: " +sizes.get(i).width + "height : " + sizes.get(i).height);  
} 

Bu yaptığım sona erdi budur bir boyut nesne

+0

Ben bu şekilde çalışmak için oldukça alamadım. Bunun yerine aşağıdakileri yaptım: Bir kamera boyutu değişkeni ilan ettim, daha sonra her nesneyi tutmak için bunu kullandı ve genişlik/yüksekliği bundan aldım. Neden önerdiğin gibi uygulayamadığımdan emin değilim. –

+0

@krishnabhadra Liste boyutlarının (dimension.get (0)) ilk öğesinin, verilen en iyi fotoğraf boyutu olup olmadığını merak ediyorum. ya da sadece rasgele iyi bir resim boyutu Kamera verilen? –

0

gelen yüksekliğini ve genişliğini almak zorunda. tip Camera.Size listesini döndürür params.getSupportedPictureSizes() yöntemle beri bunu yapmak kolaydı:

 List<Camera.Size> sizes = p.getSupportedPictureSizes(); 

     //searches for good picture quality 
     for(Camera.Size dimens : sizes){ 
      if(dimens.width <= 1024 && dimens.height <= 768){ 
       Debug.WriteLine("Width: " + dimens.width + " Height: " + dimens.height); 
       return dimens; 
      } 
     } 

     Debug.WriteLine("Width: " + sizes.get(sizes.size()-1).width + " Height: " + sizes.get(sizes.size()-1).height); 
     //returns the smallest camera size if worst comes to worst 
     return p.getSupportedPictureSizes().get(sizes.size()-1); 

Bir List<Camera.Size> almak ve başka bir listeye gibi geçebilirler. Camera.Size nesnesinin bir width ve height özelliği vardır.

List numaralı telefon numaranızın bildirilmesi, listenin her öğesinin bir döngü içinde Camera.Size yazmasını sağlamaktan daha iyi olabilir.

Aygıtlarımda sizes.get(0)'a bakarsanız, en yüksek çözünürlüğe sahip olurken sizes.get(sizes.size()-1) en düşük değere sahip olur. Bununla birlikte, bu durumun tüm cihazlarda doğru olup olmadığından emin değilim. Bunun hakkında herkesin bilgisi var mı?

+1

Samsung Galaxy Note II cep telefonumda en küçük boyut indeks 0 oluyor. Yani tüm cihazlarda aynı değil. –

+0

Evet Samsung telefonların kamera ile ilgili olarak çalışmak zordur. Görüntüleri çevrilmiş (exif arayüzleri olmadan) gibi başka sorunlar da var. Cihazın bir Samsung cihazı olup olmadığını algılamaya çalışan insanlar gördüm ve buna dayalı işlevler çalıştırın. Ne acı, haklı mıyım? – Nlinscott

+0

Evet, tüm bunlara çok üzüldüm. Özellikle yazma sürücüleri işletim sisteminin bir parçası olmalıdır. –

1

Örneğin, büyüklüğünüzün (1024 * 768) boyutunu karşılayan boyutu nasıl arayacağınıza dair bir örnek.

   List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); 
       //searches for good picture quality 
       Camera.Size bestDimens = null; 
       for(Camera.Size dimens : sizes){ 
        if(dimens.width <= 1024 && dimens.height <= 768){ 
         if (bestDimens == null || (dimens.width > bestDimens.width && dimens.height > bestDimens.height)) { 
          bestDimens = dimens; 
         } 
        } 
       } 
       parameters.setPictureSize(bestDimens.width, bestDimens.height); 
       camera.setParameters(parameters);