Estoy usando algunos filtros CoreImage para procesar una imagen. Aplicar el filtro a mi imagen de entrada da como resultado una imagen de salida llamada filterOutputImage de tipo CIImage.Creando UIImage desde CIImage
Ahora quiero mostrar esa imagen, e intentaron hacer:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
La vista sin embargo está en blanco - se visualiza nada.
Si agrego instrucciones de registro que imprimen detalles sobre filterOutputImage y self.modifiedPhoto, esas instrucciones de registro me muestran que ambos vars parecen contener datos de imagen legítimos: su tamaño se informa y los objetos no son nulos.
Así que después de hacer algunas búsquedas en Google, encontré una solución que requiere pasar por una etapa de CGImage; vis:
CGImageRef outputImageRef = [context createCGImage:filterOutputImage fromRect:[filterOutputImage extent]];
self.modifiedPhoto = [UIImage imageWithCGImage:outputImageRef scale:self.originalPhoto.scale orientation:self.originalPhoto.imageOrientation];
self.photoImageView.image = self.modifiedPhoto;
CGImageRelease(outputImageRef);
Este segundo enfoque funciona: obtengo la imagen correcta que se muestra en la vista.
¿Puede alguien explicarme por qué mi primer intento falló? ¿Qué estoy haciendo mal con el método imageWithCIImage que está dando como resultado una imagen que parece existir pero que no se puede mostrar? ¿Siempre es necesario "atravesar" una etapa de CGImage para generar un UIImage desde un CIImage?
Esperar a alguien puede aclarar mi confusión :)
H.
Ahh! Gracias. Sí, el photoImageView es un UIImageView. No tenía idea de que usaba la propiedad CGImage del UIImage. – Hamster
Una pregunta más, ¿en qué documento se explica cómo UIImageView muestra su imagen? Estoy tratando de averiguar dónde aprendiste eso desde :) – Hamster
En realidad, ahora que realmente miro el código binario: UIImageView sobrescribe -drawRect: en lugar de llamar a setContents: en su propio CALayer. Parece que finalmente llama a los métodos de dibujo UIImage, que toman el CGImageRef y lo dibujan. Entonces, el mismo resultado, pero mis detalles estaban equivocados. – iccir