Ho una domanda sul confronto di UIImages in Objective-C quando un'immagine è già stata sottoposta a un processo di salvataggio e caricamento utilizzando il metodo NSSearchPathForDirectoriesInDomains.Objective-C: confronto di un'immagine con un'altra immagine che è stata precedentemente salvata
Lo scopo di ciò che voglio è indirizzare l'utente a una nuova schermata con un clic in base a ciò che l'immagine mostra.
Per semplicità, diciamo che ci sono due possibilità: un'immagine nera e un'immagine verde. Cliccando sull'immagine nera ti porta a xib1 e cliccando sull'immagine verde ti porta a xib2.
Questo è abbastanza semplice e ha funzionato fino a quando non ho implementato un sistema di salvataggio e caricamento.
Per salvare faccio la seguente:
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];
e per caricare faccio la seguente:
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];
Questo va bene e quando ho lasciato il programma e riavviare l'immagine viene trattenuto sulla lo schermo come vorrei che fosse. Ipoteticamente diciamo che l'immagine ora visualizzata sul pulsante 1 è l'immagine verde.
Quando chiamo il seguente codice dopo aver fatto clic sul pulsante con id di mittente (questo è button1):
if(sender.currentImage == [UIImage imageNamed:self.greenImage])
{
VisitAlreadyCorrectScreen *screen = [[VisitAlreadyCorrectScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
}
anche se il currentImage è l'immagine verde ed è la stessa immagine come l'immagine che verde sto paragonando a, credo perché ho salvato l'immagine verde in memoria nel processo di salvataggio il confronto non funziona in quanto si svolgono in diversi luoghi della memoria - verificato dal seguente NSLog:
Current Image: <UIImage: 0x95614c0>, and Yes Image: <UIImage: 0xde748f0>
I non riesco a capire come confrontare le due immagini così che in questo caso corrispondono (entrambi si riferiscono alla stessa immagine che ho nella cartella delle risorse). Qualcuno ha qualche suggerimento?
Per favore fatemi sapere se non ho spiegato abbastanza bene qual è il problema!
Grazie in anticipo!
Se non è necessario il confronto al 100% pixel per pixel, è possibile utilizzare questo, che è circa 50 volte più veloce della soluzione di Paul N: http://stackoverflow.com/a/19668235/423171 – cprcrack
Potrebbe vale la pena considerare di estendere UIImage per aggiungere alcuni campi identificativi e confrontare i metodi. (Non sono sicuro di come UIImage debba essere esteso.) –