AVCaptureVideoPreviewLayer: prendre un instantané
Je suis en essayant d'imiter l'animation vu dans la valeur par défaut de la caméra app, où un instantané de la photo viseur est animé dans le coin des applications d'affichage.
La AVCaptureVideoPreviewLayer objet qui détient la clé de la résolution de ce problème n'est pas très ouvert à ces exigences: essayer de créer une copie dans un nouveau calque avec ..
- (id)initWithLayer:(id)layer
.. retourne un calque vide, sans l'image de l'instantané, donc clairement il y a parfois plus profond de la magie qui se passe ici.
Vos indices/boos sont la plupart de bienvenue.
M.
source d'informationauteur Martin Cowie
Vous devez vous connecter pour publier un commentaire.
confrontés aux mêmes difficultés, à partir d'un angle légèrement différent.
Voici des solutions possibles, qu'aucun n'est trop grand OMI:
Vous pouvez ajouter à une AVCaptureSession à la fois un AVCaptureStillImageOutput et un AVCaptureVideoDataOutput. Lorsque vous définissez la sessionPreset à AVCaptureSessionPresetHigh vous allez commencer à obtenir des images par l'API, et quand vous passez à AVCaptureSessionPresetPhoto vous pouvez prendre des images du réel. Donc, juste avant de prendre la photo, vous pouvez passer à la vidéo, d'obtenir une image, et ensuite de retour à la caméra. Bémol de taille, c'est qu'il prend un "long" temps (quelques secondes) pour l'appareil photo pour basculer entre la caméra vidéo et appareil photo.
Une autre option serait de n'utiliser que la sortie de la caméra (AVCaptureStillImageOutput), et l'utilisation UIGetScreenImage pour obtenir une capture d'écran du téléphone. Vous pouvez ensuite découper les commandes et ne laisser que l'image. Cela devient compliqué si vous êtes montrant des contrôles d'INTERFACE utilisateur sur l'image. Aussi, selon cette post, Apple a commencé à rejeter les applications qui utilisent cette fonction (il a toujours été douteux).
En dehors de ces j'ai aussi essayé de jouer avec AVCaptureVideoPreviewLayer. Il y a cette post pour enregistrer une UIView ou CALayer à une UIImage. Mais tout cela a produit clair ou blanc images. J'ai essayé d'accéder à la couche, le point de vue de la couche, la superlayerle presentationLayerle modelLayermais en vain. Je suppose que les données dans AVCaptureVideoPreviewLayer est très interne, et pas vraiment partie de l'ordinaire de la couche d'infrastructure.
Espère que cette aide,
Oded.
Je pense que vous devriez ajouter un
AVCaptureVideoDataOutput
à la session en cours avec:Ensuite, de mettre en œuvre le délégué de la méthode ci-dessous pour obtenir votre capture d'images:
Cela consomme de la mémoire et réduire les performances de l'application. À améliorer, vous pouvez également optimiser votre
AVCaptureVideoDataOutput
avec:Vous pouvez également utiliser
alwaysDiscardsLateVideoFrames
.il y a 2 façons d'acquérir des images de l'aperçu.. AVCaptureVideoDataOutput & AVCaptureStillImageOutput 🙂
est votre session de capture de la configuration, de saisir des images vidéo, puis faire votre calque avec le cgimage à partir d'un cadre choisi. si c'est le programme d'installation pour des photos, attendez jusqu'à l'obtention de votre image et faire de votre calque à partir d'une version réduite de cette cgimage. si vous n'avez pas de sortie sur votre session encore, vous aurez à ajouter, je crois.
De départ dans iOS 7, vous pouvez utiliser UIView::snapshotViewAfterScreenUpdates à l'instantané de UIView d'emballage de votre AVCaptureVideoPreviewLayer. Ce n'est pas le même que
UIGetScreenImage
qui sera votre application rejeté.Rappel old-school façon de tourner dans un sens comme dans une image. Pour une raison quelconque, il a travaillé sur tout, sauf pour l'appareil-photo avant-premières: