especificaciones - iphone 7 y 7 plus caracteristicas
iPhone: obtenga una vista previa de la cámara (3)
Me gustaría obtener la imagen que se muestra en el UIImagePickerController cuando el usuario usa la cámara. Y cuando llegue, quiero procesar la imagen y mostrarla en lugar de la vista normal de la cámara.
Pero el problema es que cuando quiero obtener la vista de la cámara, la imagen es solo un rectángulo negro.
Aquí está mi código:
UIView *cameraView = [[[[[[imagePicker.view subviews] objectAtIndex:0]
subviews] objectAtIndex: 0]
subviews] objectAtIndex: 0];
UIGraphicsBeginImageContext( CGSizeMake(320, 427) );
[cameraView.layer renderInContext: UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageToDisplay.image = [PixelProcessing processImage: viewImage]; //In this case the image is black
//imageToDisplay.image = viewImage; //In this case the image is black too
//imageToDisplay.image = [UIImage imageNamed: @"icon.png"]; //In this case image is being displayed properly
¿Qué estoy haciendo mal?
Gracias.
al menos por ahora, no hay forma de hacer esto. (Ciertamente no es una forma oficial documentada, y por lo que sé, nadie ha descubierto una forma no oficial tampoco).
el OS está sacando los datos de la vista previa de la cámara de alguna manera que elude los métodos gráficos normales.
Este también está funcionando bastante bien. Úselo cuando la vista previa de la cámara esté abierta:
UIImage *viewImage = [[(id)objc_getClass("PLCameraController")
performSelector:@selector(sharedInstance)]
performSelector:@selector(_createPreviewImage)];
Pero hasta donde yo sé, ofrece los mismos resultados que la siguiente solución que toma una "captura de pantalla" de la pantalla actual:
extern CGImageRef UIGetScreenImage();
CGImageRef cgoriginal = UIGetScreenImage();
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, rect);
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgoriginal);
CGImageRelease(cgimg);
Un problema que todavía no encuentro una solución es ¿cómo se puede obtener la imagen de la cámara muy rápido sin superposiciones?
La llamada no oficial es:
UIGetScreenImage()
que declaras arriba de @implementation como:
extern CGImageRef UIGetScreenImage();
Puede haber una forma documentada de hacerlo en 3.1, pero no estoy seguro. Si no es así, por favor, registren un Radar con Apple y pídales que hagan pública una especie de acceso a la pantalla.
Eso usa tu mismo AppleID con el que inicias sesión en el portal de desarrollo de iPhone.
Actualización: esta llamada aún no está documentada, pero Apple dio explícitamente la autorización para usarla con las aplicaciones de la App Store.