2009-03-02 10 views

risposta

0

Purtroppo non è possibile. Per prestazioni, l'iPhone utilizza una forma di rendering diretto per disegnare l'anteprima della fotocamera direttamente sullo schermo anziché come parte di una superficie UIView. Di conseguenza, quando "acquisisci" la vista della videocamera, otterrai solo gli elementi UIView, non l'immagine di anteprima.

(FWIW questo è simile ai motivi per cui la sua difficile ScreenGrab alcuni software di film su Windows/Mac)

+0

Penso che dovrebbe essere possibile, dal momento che nell'AppStore ci sono app che fanno chiaramente screenshot della finestra di anteprima della telecamera (ad esempio QuadCam). Se chiami UIGetScreenImage() ottieni effettivamente un'immagine dell'anteprima della videocamera, ma questa è una funzione API privata e non dovrebbe essere utilizzata. –

+0

Sì, UIGetScreenImage acquisisce il framebuffer corrente. renderInContext disegna la gerarchia della vista della vista specificata in un contesto. Queste sono cose concettualmente diverse. –

+0

Sì, lo capisco. Il motivo per cui chiedo è qualcuno con il nome "Rolando" ha pubblicato che ha un terzo modo per salvare l'anteprima della fotocamera come un'immagine, ma afferma di non poter divulgare le informazioni a causa di una NDA. http://blog.airsource.co.uk/index.php/2008/11/11/views-of-uiimagepickercontroller/ –

4

Non è possibile da un api documentato, ma possibile. Trova la vista "PLCameraView" nel subviews della fotocamera, quindi chiamare

CGImageRef img = (CGImageRef)[foundCameraView imageRef]; 

Questo restituirà un riferimento all'immagine che detiene fotocamera.

+0

Apple rifiuterà un'app che esegue questa operazione? –

2

Si può fare questo con il nuovo materiale AVFoundation in iOS 4.0.

Dovresti riuscire a chiamare UIGetScreenImage() (restituisce una UIImage) per ottenere una cattura corrente dell'intero schermo, inclusa l'anteprima. Ecco come tutte le app per codici a barre funzionavano prima. Ma apparentemente Apple non ammette che ora e solo consentire la tecnica AVFoundation - che funziona solo sotto 4.0.

L'intero motivo per cui esiste anche un problema è dovuto al fatto che UIGetScreenImage() non fa parte dell'API documentata, ma Apple ha fatto un'eccezione specifica per l'utilizzo. Non è che stiano tirando le app attuali, ma non consentono nuove submission (o aggiornamenti) che usano la tecnica più vecchia.

Ci sono alcune lobby per conto di un certo numero di persone per convincere Apple a lasciare che gli sviluppatori di app utilizzino la vecchia tecnica solo per iOS 3.x, quindi invia una email alle relazioni con gli sviluppatori se vuoi usarla.

Problemi correlati