2012-07-12 21 views
5

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 ...

Respuesta

0

La razón está en la concepción Todo UIKit, CoreGraphics y CoreImage hacen tres cosas fundamentalmente diferentes que no pueden ser un 'gran formato de imagen unificado central'. Además, estos marcos cooperan bien; Dicho esto, la conversión debe ser tan optimizada y tan rápida como sea posible, pero, por supuesto, el procesamiento de imágenes siempre es una operación relativamente computacionalmente costosa.

Cuestiones relacionadas