Objective-C:将图像与先前保存的另一图像进行比较

use*_*044 8 memory compare objective-c uiimage ios

当有一个图像已经使用NSSearchPathForDirectoriesInDomains方法进行保存和加载过程时,我有一个关于比较Objective-C中的UIImages的问题.

我想要的目的是根据图像显示的内容,在点击时将用户引导到新的屏幕.

为简单起见,我们假设有两种可能性 - 黑色图像和绿色图像.单击黑色图像将转到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];
Run Code Online (Sandbox Code Playgroud)

并加载我执行以下操作:

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];
Run Code Online (Sandbox Code Playgroud)

这很好,当我退出程序并重新启动它时,图像会保留在屏幕上,如我所愿.假设现在出现在button1上的图像是绿色图像.

当我点击id为sender的按钮后调用以下代码(这是button1):

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

即使currentImage是绿色图像,并且与我正在比较的绿色图像是相同的图像,我认为因为我在保存过程中将绿色图像保存到内存中,因此比较不起作用,因为它们保存在不同的地方在内存中 - 由以下NSLog验证:

Current Image: <UIImage: 0x95614c0>, and Yes Image: <UIImage: 0xde748f0>
Run Code Online (Sandbox Code Playgroud)

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

如果我没有充分解释问题是什么,请告诉我!

提前致谢!

Pau*_*l N 25

您可以比较图像名称或图像URL(如果从Internet下载),它也比比较图像更快.

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

比较图像使用:正如Fls'Zen回答中提到的那样.

if ([UIImagePNGRepresentation(blackImage) isEqualToData:UIImagePNGRepresentation(greenImage)])
Run Code Online (Sandbox Code Playgroud)