No estoy seguro de por qué se necesita tanta conversión entre formatos de imagen en iOS. Por ejemplo, si cargo un jpg en un UIImage y luego deseo hacer detección de rostros en él, necesito crear un CIImage para pasar al CIDetector. ¿No representa esto un golpe en la memoria y el rendimiento?¿Por qué se necesita tanta conversión entre formatos de imagen? (UIImage, CGImage, CIImage)
¿Es esto algo heredado entre Core Graphics, Core Image y UIKit (y probablemente OpenGL ES pero no trabajo con eso)? ¿El golpe es trivial en general?
Haré lo que necesito hacer pero me gustaría saber más acerca de esto es necesario. Además, me he encontrado con problemas que a veces hacen conversiones y se enredan en las diferencias entre los formatos.
actualización
Ok - por lo que sonó acabo de nuevo por mi confusión sobre estos formatos (o la confusión de estos formatos ...). Perdió una media hora. Esto es lo que estaba haciendo:
Pruebas de caras en una imagen local, que creó el CIImage necesario con:.
CIImage *ciImage = [image CIImage];
y no estaba recibiendo ningún características posterior no importa qué orientación pasé en I saber esta imagen en particular ha trabajado con el CIDetectorTypeFace
antes de y que he tenido problemas con el formato CIImage
. El intentó crear el CCImage como este:
CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
y Detección de la cara funciona bien. Arrgh! Me aseguré con [image CIImage]
que el CIImage resultante no era nulo. Entonces estoy confundido El primer enfoque solo obtiene un puntero mientras que el segundo crea un nuevo CIImage. ¿Eso marca la diferencia?
Buscando en el archivo UIImage.h veo lo siguiente:
// returns underlying CGImageRef or nil if CIImage based
@property(nonatomic,readonly) CGImageRef CGImage;
// returns underlying CIImage or nil if CGImageRef based
@property(nonatomic,readonly) CIImage *CIImage;
así que supongo que es la clave - desarrollador Cuidado: prueba para nil ...