2011-12-05 25 views
8

Görüntü tanıma için kamera ön izlemesini kullanmak istiyorum. benim amaçlarım için, mümkün olduğunca yüksek önizleme çözünürlüğüne ihtiyacım var (ve aynı zamanda önizlemeyi kullanıcıya gösterir).Nasıl 720p Android Kamera Önizleme Verileri alırsınız?

SurfaceView öğesini genişleten ve PreviewSize öğesini 1280x720 olarak ayarlayan bir Önizleme sınıfı oluşturdum. ama sadece ilk 497.664 Bayt veri içeren (eşleştirme -

Benim Byte Dizisi b 1.382.400 Byte ve benim CameraPreviewCallback.onPreviewFrame() fonksiyonu bu 1382400 Bytes aldığı
camera = Camera.open(); 

parameters = camera.getParameters(); 
parameters.setPreviewSize(1280,720); 

camera.setParameters(parameters); 
byte[] b = new byte[camera.getParameters().getPreviewSize().width * 
    camera.getParameters().getPreviewSize().height * 
    ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat())/8]; 
camera.addCallbackBuffer(b); 
camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback()); 

try { 
camera.setPreviewDisplay(this.getHolder()); 
camera.startPreview() 
} 

: Ben canlı Image almak için bir PreviewCallBack eklendi Bir 768x432 çözünürlük (HTC Desire)).

Ben 800x480 ekran çözünürlükleri (HTC Desire, LG Optimus 3D Samsung Galaxy S2, Samsung Galaxy Tab, ...) ile tüm farklı cihazlarda bu test etti. Kodumun çalıştığı tek cihaz HTC Desire HD.

Tam 720p çözünürlüğünü bir Byte Dizisi olarak nasıl alacağını bilen var mı? "Bir şey" akıllı telefonun ekranına sığacak şekilde önizleme çözünürlüğünü azaltıyor gibi görünüyor.

Selamlar

Joern

+0

Telefonunuzun 720p desteklediğinden emin misiniz? Logcat bir şey söylüyor mu ("çözünürlüğü ayarlayamaz" gibi)? – Lennart

+0

Yep, 720p tüm cihazlarda önizleme boyutu olarak destekleniyor. Logcat özel bir şey söylemiyor - "bir şey" gibi görünüyor önizleme çözünürlüğünü sessizce azaltıyor. –

+0

getPreviewSize() doğru boyutu döndürüyor mu? – Lennart

cevap

8

Bir kamera önizleme için herhangi rastgele çözünürlüğü kullanamaz.

Bazı aygıtlar yalnızca belirli çözünürlükleri destekler. Bunları Camera.Parameters.getSupportedPreviewSizes() ¹ ile sorgulayabilirsiniz. Cihazınız bu listede 1280x720 dönmüyorsa, kullanamazsınız. İstediğinize yakın gelen desteklenen bir çözünürlük seçin.

Bu eski bir soru olmasına rağmen herhangi bir çözünürlük 720p ya da değil

+2

(Maalesef) 1280x720p, listelenen her aygıtın listesinde. SupportedPreviewSizes'i kontrol ettim. –

2

kullanmadan önce genel olarak yapmalıdır ¹, cevap değişmedi: Her cihaz için desteklenen önizleme boyutları listesi doğru değildir. Varsayılan önizleme boyutu, bilgimin en iyisine, her zaman geçerli. Diğer boyutlar, duruma göre büyük ölçüde işe yarar görünüyor - varsayılan önizleme boyutunun ekranda hatalı görünmeyeceğinden emin olabilirsiniz, ancak hepsi bu kadardır. Özellikle, bu Byte Array, "desteklenen" olsalar bile daha büyük görüntü formatlarını barındırmak için ölçeklenmeyecek ve "desteklenen" önizleme boyutlarının yalnızca bazılarında çözünürlükte ve yeşil/pembe bozulma olmadan düzgün bir şekilde işlenecektir.

Çözünürlüğün doğru olduğunu ve onPreviewFrame() öğesinin verilerinin iyi olduğunu bilmenin tek güvenilir yolu, bunu el ile test etmektir.

İlgili konular