2012-01-05 31 views
9

Özel bir Kamera Uygulaması oluşturdum ve çekilen resmin geri kalanını değiştirmeye çalışıyorum. Bu, telefonun veya Android'in sürümüne bağlı olabileceğini okudum.Android Fotoğraf Makinesi Ayar Çözünürlüğü

setParameters'u kullanarak ayarlandığını biliyorum, ancak tüm telefonlarda çalışmaya başlamak için actuall resoloution'ı nasıl ayarlayacağınızı bilmiyorum. Benim uygulama kuvveti başka türlü kapanır gibi küçük olmak istiyorum. 640x348'de bir test fotoğrafı kullandığımda, bu boyut/çözünürlük etrafında mükemmel çalışır.

setPictureSize kullanımı daha kolay olabilir mi?

public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera = Camera.open(); 
    try { 
      Camera.Parameters parameters = camera.getParameters(); 
      if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.set("orientation", "portrait"); 
       camera.setDisplayOrientation(90); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(90); 
      } else { 
       parameters.set("orientation", "landscape"); 
       camera.setDisplayOrientation(0); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(0); 
      } 
      camera.setParameters(parameters); 
      camera.setPreviewDisplay(holder); 
     } catch (IOException exception) { 
     camera.release(); 
     } 
     camera.startPreview(); 
    } 

cevap

16

, sadece setPictureSize() hiçbir setResolution() yoktur. İstediğiniz boyutu bulmak için getSupportedPictureSizes() numaralı telefonu kullanın ya da ListView veya Spinner numaralarını doldurmak için bu bilgileri kullanın ya da kullanıcının istenen boyutu seçmesi için bir şeyler kullanın. Here is a sample project son zamanlarda desteklenen en küçük çözünürlüğü bulmak ve kullanmak için getSupportedPictureSizes() kullanmak için güncelleştirildi. Bu hepinize yardımcı olacaktır

mCamera = Camera.open(); 
Camera.Parameters params = mCamera.getParameters(); 

// Check what resolutions are supported by your camera 
List<Size> sizes = params.getSupportedPictureSizes(); 

// Iterate through all available resolutions and choose one. 
// The chosen resolution will be stored in mSize. 
Size mSize; 
for (Size size : sizes) { 
    Log.i(TAG, "Available resolution: "+size.width+" "+size.height); 
     mSize = size; 
    } 
} 

Log.i(TAG, "Chosen resolution: "+mSize.width+" "+mSize.height); 
params.setPictureSize(mSize.width, mSize.height); 
mCamera.setParameters(params); 

Hope:

+0

Tamam, kodunuzu github'dan çalıştırmayı denediğimi, ancak sadece tutulma hatalarını nasıl aldığımı nasıl uyguladığınızı göstermeniz mümkün mü? – Matt

+0

Kod ayrıca desteklenen boyutları kontrol edecek ve daha sonra en küçüğü olarak kaydedecek mi yoksa daha fazla mı gerekiyor? – Matt

+0

@Matt: Hataların ne olduğunu söylemeyi reddederseniz "tutulma hataları" konusunda size yardımcı olamam. Ve "daha fazla" nın ne olduğu hakkında hiçbir fikrim yok ve kodun buna ihtiyacı olup olmadığını söyleyemem. – CommonsWare

10

Burada size kendi çözünürlük ayarlayabilirsiniz kaliteli ile görüntü yakalamak için çok kolaydır.

+0

Bir çözüm listesi var ve bir aralık arasında seçim yapabilirsiniz. Bir mola verirseniz en yüksek çözünürlük seçilecektir; Bu döngüdeki ilk bulgunun bildirimi ve ayrıca çalışma zamanı istisnası ve OutOfMemory istisnasından kaçınmanız/kontrol etmeniz gerekir: if (size.width> = 600 && size.width <= 800) { mSize = size; kırılması; } –

+0

@AbhinavSaxena, evet, istediğimiz gibi birini bile seçebiliriz. –

+0

Bu bir çözüm değil bir çözüm değildi. Çözümü yorumlarıma ekledim. Cevabınızda değişiklik yapabilirsiniz. Teşekkürler. –

İlgili konular