Tengo una pregunta sobre la comparación de UIImages en Objective-C cuando una imagen ya ha pasado por un proceso de guardar y cargar utilizando el método NSSearchPathForDirectoriesInDomains.Objetivo-C: comparar una imagen con otra imagen guardada previamente
El objetivo de lo que quiero es dirigir al usuario a una nueva pantalla con un clic dependiendo de lo que muestra la imagen.
Para simplificar, supongamos que hay dos posibilidades: una imagen negra y una verde. Al hacer clic en la imagen negra, accederá a xib1 y al hacer clic en la imagen verde, accederá a xib2.
Esto es bastante simple y ha estado funcionando hasta que haya implementado un sistema de guardar y cargar.
Para guardar hago lo siguiente:
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
pngFilePath = [NSString stringWithFormat:@"%@/test.png",documentsDirectory];
data1 = [NSData dataWithData:UIImagePNGRepresentation([level1part1 objectAtIndex:0])];
[data1 writeToFile:pngFilePath atomically:YES];
y cargar hago lo siguiente:
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
pngFilePath = [NSString stringWithFormat:@"%@/test.png",documentsDirectory];
UIImage *image = [UIImage imageWithContentsOfFile:pngFilePath];
[button1 setImage:image forState:UIControlStateNormal];
Esto está bien y cuando sale del programa y reiniciarlo la imagen se conserva en la pantalla como deseo que sea. Hipotéticamente, digamos que la imagen que ahora aparece en el botón 1 es la imagen verde.
Cuando llamo el código siguiente después de hacer clic en el botón con id de los emisores (este es el botón 1):
if(sender.currentImage == [UIImage imageNamed:self.greenImage])
{
VisitAlreadyCorrectScreen *screen = [[VisitAlreadyCorrectScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
}
aunque el currentImage es la imagen verde y es la misma imagen que la imagen I verde estoy comparando con, creo, porque he salvado la imagen verde en la memoria en el proceso de memoria, la comparación no funciona, ya que se llevan a cabo en diferentes lugares de la memoria - verificado por la siguiente NSLog:
Current Image: <UIImage: 0x95614c0>, and Yes Image: <UIImage: 0xde748f0>
I No se puede averiguar cómo comparar las dos imágenes por lo que en este caso coinciden (ambos se relacionan con la misma imagen que tengo en la carpeta de recursos). ¿Alguien tiene alguna sugerencia?
Háganme saber si no he explicado suficientemente cuál es el problema.
¡Gracias de antemano!
Si no necesita una comparación de 100% píxel por píxel, puede usar esto, que es aproximadamente 50 veces más rápido que la solución de Paul N: http://stackoverflow.com/a/19668235/423171 – cprcrack
Podría vale la pena considerar extender UIImage para agregar algunos campos de identificación y comparar métodos. (No estoy seguro de cuán feliz se va a extender UIImage.) –