Objective-C:将图像与以前保存的其他图像进行比较

我有一个关于在Objective-C中比较UIImage的问题,当一个图像已经通过使用NSSearchPathForDirectoriesInDomains方法的保存和加载过程。

我想要的目标是指导用户到一个新的屏幕上点击取决于图像显示。

为了简单起见,假设有两种可能性 – 黑色图像和绿色图像。 点击黑色的图像将您带到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]; 

这很好,当我退出程序并重新启动时,图像保留在屏幕上,因为我希望它。 假设我们假设现在出现在button1上的图像是绿色的图像。

当我点击发件人ID(这是button1)的button后,我调用下面的代码:

 if(sender.currentImage == [UIImage imageNamed:self.greenImage]) { VisitAlreadyCorrectScreen *screen = [[VisitAlreadyCorrectScreen alloc] initWithNibName:nil bundle:nil]; screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentModalViewController:screen animated:YES]; } 

即使当前图像是绿色的图像,并且与我正在比较的绿色图像是相同的图像,但我认为是因为在保存过程中将绿色图像保存到内存中,所以比较不起作用,因为它们被放在不同的地方在内存中 – 由以下NSLogvalidation:

 Current Image: <UIImage: 0x95614c0>, and Yes Image: <UIImage: 0xde748f0> 

我无法弄清楚如何比较这两个图像,以便在这种情况下它们匹配(它们都与资源文件夹中的图像相关)。 有没有人有任何build议?

请让我知道,如果我没有解释清楚问题是什么!

提前致谢!

您可以比较图片名称或图片的url,如果它是从互联网下载,它也会比比较图像更快。

此外,问题是,通过使用==运算符,您正在比较映像0x95614c0和0xde748f0的内存地址。 这就是为什么不相等。 你是比较,如果他们是相同的对象,而不是如果图像是平等的。

比较图片的使用方法:正如Fls'Zen所提到的答案。

 if ([UIImagePNGRepresentation(blackImage) isEqualToData:UIImagePNGRepresentation(greenImage)]) 

您的图像当然有不同的地址,因为从应用程序包中加载了一个,并从文档目录中加载了一个。 [UIImage imageNamed:]函数仅返回应用程序包中的图像。

如果你真的想比较内容的图像,看看这个问题。 在第一个答案中,为图像计算散列值。 在你的代码中,你可以比较你所拥有的两个图像的哈希值。 第二个答案直接比较图像,如果哈希使你紧张。

我build议去一个不同的路线,让你的应用程序跟踪哪个图像加载到图像本身之外。