У меня возник вопрос о сравнении UIImages в Objective-C, когда одно изображение уже прошло через процесс сохранения и загрузки с использованием метода NSSearchPathForDirectoriesInDomains.Objective-C: Сравнение изображения с другим ранее сохраненным изображением
Целью того, что я хочу, является направить пользователя на новый экран по щелчку в зависимости от того, что отображает изображение.
Для простоты предположим, что есть две возможности - черное изображение и зеленое изображение. Щелчок по черному изображению приведет вас к xib1, и щелчок по зеленому изображению приведет вас к xib2.
Это достаточно просто и работает до тех пор, пока я не реализовал систему сохранения и загрузки.
Чтобы сохранить меня сделать следующее:
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];
и нагрузить я сделать следующее:
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];
Это нормально, и когда я выйти из программы и перезапустить его изображение сохраняется на на экране, как я хочу. Гипотетически предположим, что изображение, появившееся на кнопке 1, является зеленым.
Когда я звоню следующий код после нажатия на кнопку с идентификатором отправителя (это button1):
if(sender.currentImage == [UIImage imageNamed:self.greenImage])
{
VisitAlreadyCorrectScreen *screen = [[VisitAlreadyCorrectScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
}
даже если currentImage является зеленый образ и та же картина, как зеленый изображение I я сравнивая его, я думаю, потому что я сохранил зеленый образ в память в процессе сохранения сравнение не работает, как они проводятся в разных местах, в памяти - проверяются следующим NSLog:
Current Image: <UIImage: 0x95614c0>, and Yes Image: <UIImage: 0xde748f0>
I не могут решить, как сравнивать два изображения, так что что в этом случае они совпадают (оба они относятся к одному и тому же изображению, которое у меня есть в папке ресурсов). У кого-нибудь есть предложения вообще?
Пожалуйста, дайте мне знать, если я недостаточно хорошо объяснил, в чем проблема!
Заранее благодарен!
Если вам не нужно 100% сравнение пополам, вы можете использовать это, что примерно в 50 раз быстрее, чем решение Paul N: http://stackoverflow.com/a/19668235/423171 – cprcrack
Это может быть стоит рассмотреть возможность расширения UIImage для добавления некоторых полей идентификаторов и методов сравнения. (Не уверен, как будет расширен расширенный UIImage.) –