2009-03-02 13 views

Respuesta

0

Desafortunadamente no es posible. Para el rendimiento, el iPhone utiliza algún tipo de representación directa para dibujar la vista previa de la cámara directamente en la pantalla en lugar de hacerlo como parte de una superficie UIView. Como tal, cuando "captura" la vista de la cámara solo obtendrá los elementos de UIView, no la imagen de vista previa.

(Fwiw Esto es similar a las razones por las que es difícil de Screengrab algún software de películas en Windows/Mac)

+0

Creo que debería ser posible, ya que hay aplicaciones en la AppStore que claramente toman capturas de pantalla de la ventana de vista previa de la cámara (por ejemplo, QuadCam). Si llama a UIGetScreenImage() realmente obtiene una imagen de la vista previa de la cámara, pero esta es una función de API privada y no debe utilizarse. –

+0

Sí, UIGetScreenImage toma el framebuffer actual. renderInContext dibuja la jerarquía de vista de la vista especificada en un contexto. Estas son cosas conceptualmente diferentes. –

+0

Sí, entiendo eso. La razón por la que pregunto es por alguien llamado "Rolando" que ha publicado que tiene una tercera forma de guardar la vista previa de la cámara como una imagen, pero afirma que no puede divulgar la información debido a una NDA. http://blog.airsource.co.uk/index.php/2008/11/11/views-of-uiimagepickercontroller/ –

4
No

posible de un API documentado, pero es posible. Encuentra la vista "PLCameraView" en subvistas de la cámara, a continuación, llamar

CGImageRef img = (CGImageRef)[foundCameraView imageRef]; 

Esto devolverá una referencia a la imagen que tiene la cámara.

+0

¿Apple rechazará una aplicación que hace esto? –

2

Usted puede hacer esto con el nuevo material AVFoundation en IOS 4.0.

Debería poder llamar a UIGetScreenImage() (devuelve un UIImage) para obtener una captura actual de toda la pantalla, incluida la vista previa. Así es como todas las aplicaciones de códigos de barras funcionaban antes. Pero supuestamente, Apple no permite eso ahora y solo permite la técnica AVFoundation, que solo funciona por debajo de 4.0.

La razón por la que incluso hay un problema es porque UIGetScreenImage() no es parte de la API documentada, pero Apple hizo una excepción específica para usarla. No es como si estuvieran sacando aplicaciones actuales, pero no permiten nuevas presentaciones (o actualizaciones) que usan la técnica anterior.

Existe cierto cabildeo en nombre de varias personas para convencer a Apple de permitir que los desarrolladores de aplicaciones utilicen la técnica anterior solo para iOS 3.x, así que envíe un correo electrónico a las relaciones con el desarrollador si desea usarlo.

Cuestiones relacionadas