2010-08-18 23 views
12

Hemen çerçeveleyin, kullanıcıların iPhone kamerayı kullanarak fotoğraf çekmelerine olanak tanıyan bir uygulama yapıyorum ve mevcut olduğunda (iOS4) AVFoundation kullanıyorum, böylece kullanıcılar dokunma özelliği özelliğini kullanabiliyorlar. özel bir yer paylaşımı.Bir AVCaptureSession

yaşıyorum sorun olduğunu video halen nerede olduğunu kafa karıştırıcı bir hal yoktur bu yüzden ana video akışını kare dondurmak istediğiniz sırasında, tamamlanması birkaç saniye sürercaptureStillImageAsynchronouslyFromConnection koşuyor, ancak kullanıcı bir fotoğrafı kapattı (ve kamera deklanşör sesi söner).

Fotoğraf çekimi isteğinde bulunduktan hemen sonra [session stopRunning] 'i çağırmayı denedim, ancak bu tahmin edilemeyen sonuçlara yol açıyor; hala görüntü tamamlama bloğu, bu durumda genellikle kovulmaz.

Deklanşör vurulduğunda video önizleme katmanına nasıl sahip olabileceğimi düşündüğüm herhangi bir fikir "duraklat"?

+0

Ben de, diğer gördüğüm o oturumun bağlantısını önerir, daha sonra kamera tamamen kırık ve istikrarsız. – RainCast

cevap

5

Aynı şeyi deniyorum. Benim durumumda captureStillImageAsynchronouslyFromConnection dönmek 0,5 saniye sürebilir, bu yüzden tamamlama işleyicisinde bazı işleme yapıyorsunuzdur? Eğer durum buysa

, kendim için yeterli değildir, her ikisi de 2 seçenek, ile geldi, ama ben de olduğu ortaya çıktı Ya sen

için yapabilir:
* stopRunning çağrı Tamamlama işleyici çağrıldığında yakalama oturumunda (yine, benim durumumda 0,5 saniye) ve sonra işlendikten sonra yeniden startRunning yeniden başlatın.
* kaplamanın üst kısmında bir UIImageView bulun ve işlem yaparken, bu görüntüdeki kamera veya video akışından alınan son resmi saklayın. Her iki çözümden beni neden vazgeçiren şey, ikisi de sürece bir kaç saniye ekleyebilmeleriydi. Ama umarım yardımcı olur, ya da bir yön verir.

Şerefe, Oded.

+0

Birçok denemeden sonra bu doğru cevap. – RainCast

4

Basit donma çerçeveleme, kullanıcıya ekranda görüntülenen resmin zaten alınmış olduğu izlenimini verir, bu da en az — yanlış yazılmış bir resim gösterir. Camera.app, "deklanşörü" kapatarak sorunu çözer.

AVCaptureVideoPreviewLayer alpha değerini 0,5 olarak değiştirmek için, hala çalışır durumda olsa da, kısılmış bir resmin izlenimini alabilirsiniz.

Diğer bir seçenek, sabit görüntü elde etmek için AVCaptureVideoDataOutput ve bazı görüntü işleme özelliklerini kullanmaktır. Ne yazık ki, aynı anda hem AVCaptureVideoDataOutput hem de AVCaptureStillImageOutput kullanmak mümkün görünmüyor; Bir geçici çözüm, bir sonraki video karesini yakalayarak "fotoğraf çek" işlevini uygulamaktır (elbette bu, video çözünürlüğünüzle sınırlıdır, ancak yalnızca çerçeve üzerinde görüntü işleme yapmak istiyorsanız iyi olur).

0

Eski yanıt, ancak merak için bir güncelleştirme: iOS5'te bir AVCaptureStillImageOutput ve bir AVCaptureVideoDataOutput'ı aynı anda kullanabilirsiniz. Bir sonraki video karesini ve fotoğrafını çekerken aynı anda iyi bir başarı elde ettim. Ben UI gizler ve sonra görüntü geri AVCaptureVideoDataOutput alındığında geri fade basit bir soluk animasyon kullanın.Bu işlem, AVCaptureVideoDataOutput'tan çıkan daha küçük ve daha düşük kaliteli görüntüler nedeniyle, AVCaptureStillImageOutput'un captureStillImageAsynchronouslyFromConnection:completionHandler: üzerinden hareketsiz görüntü beklemesinden çok daha hızlıdır.

16

Sadece çekiminizi ayarlamanız gerekiyorVideoPreviewLayer.connection.enabled = NO; Ayrıntılar için

burada cevabım bakın:

AVCaptureSession pause?

+0

bunu denedi ve kamerada bazı garip davranışlara yol açıyor. – RainCast

+0

Çok mavi görünen bir fotoğraf çekimi de dahil olmak üzere garip davranışlar .... pozlamada bazen çok karanlık. – RainCast

+0

Hangi iOS sürümünde bu garip davranışlar var? – DisableR

İlgili konular