UIImageView图像名称比较问题

时间:2013-10-29 06:11:40

标签: ios iphone objective-c uiimageview

最近我发现了一个关于UIImageView图像的问题。

我的目的是找到UIImageView是否包含图像(image.png)。

if([[self.ImgView.image isEqual:[UIImage imageNamed:@"image.png"]])
{
   NSLog(@"Image View contains image.png");//In normal run....
}else
{
  NSLog(@"Image View doesn't contains image.png");//Once came back from background
}

在正常运行中,上面的代码工作正常。

但是当应用程序一旦被发送到后台,它就无法工作。

6 个答案:

答案 0 :(得分:9)

通常UIImageView无法存储图片的文件名,但只存储UIImage所以, 无法获取您在UIImageView中添加的图像文件名。

如果你只想比较图像文件名,那就无法比较它了。

但是如果你想比较两个UIImage对象那么

UIImage *secondImage = [UIImage imageNamed:@"image.png"];

NSData *imgData1 = UIImagePNGRepresentation(self.imageView.image);
NSData *imgData2 = UIImagePNGRepresentation(secondImage);

BOOL isCompare =  [imgData1 isEqual:imgData2];
if(isCompare)
{
  NSLog(@"Image View contains image.png");
}
else
{
  NSLog(@"Image View doesn't contains image.png");
}

答案 1 :(得分:1)

如果可以重复使用相同的图像,ios将智能地重复使用图像,而不是创建新的图像。这就是你的比较有效的原因。这是一项糟糕的技术,不应该依赖它。

通过保持对用于生成第一个图像的字符串的引用,并比较它以查看它是否包含image.png,可以更好地服务。

@property NSString *imageName;

然后当您使用[UIImage imageNamed:yourNameString]创建UIImage时,可以保存与imageName = yourNameString一起使用的字符串;

然后,稍后检查

 if ([imageName isEqualToString:@"image.png"]) {
   ...
}

答案 2 :(得分:1)

我会使用图像来存储状态信息,你也不知道是否isEqual:正在比较你感兴趣的东西。如果它只是使用isEqual它继承自NSObject然后它将只比较UIImage地址,这可以解释为什么你有问题,也许UIImageView在内部使用CGImage或一些低级对象,并根据需要创建一个UIImage。

答案 3 :(得分:1)

试试这个

float numDifferences = 0.0f;
float totalCompares = width * height / 100.0f;
for (int yCoord = 0; yCoord < height; yCoord += 10) {
    for (int xCoord = 0; xCoord < width; xCoord += 10) {
        int img1RGB[] = [image1 getRGBForX:xCoord andY: yCoord];
        int img2RGB[] = [image2 getRGBForX:xCoord andY: yCoord];
        if (abs(img1RGB[0] - img2RGB[0]) > 25 || abs(img1RGB[1] - img2RGB[1]) > 25 || abs(img1RGB[2] - img2RGB[2]) > 25) {
            //one or more pixel components differs by 10% or more
            numDifferences++;
        }
    }
}

if (numDifferences / totalCompares <= 0.1f) {
    //images are at least 90% identical 90% of the time
}
else {
    //images are less than 90% identical 90% of the time
}

答案 4 :(得分:1)

是的,您可以与以下数据的帮助进行比较

    UITableViewCell *cell = (UITableViewCell*)[self.view viewWithTag:indexPath.row + 100];

    UIImage *secondImage = [UIImage imageNamed:@"boxhover.png"];

    NSData *imgData1 = UIImagePNGRepresentation(cell.imageView.image);
    NSData *imgData2 = UIImagePNGRepresentation(secondImage);

    BOOL isCompare =  [imgData1 isEqual:imgData2];
    if(isCompare)
    {
        //contain same image
        cell.imageView.image = [UIImage imageNamed:@"box.png"];
    }
    else
    {
        //does not contain same image
        cell.imageView.image = secondImage;
    }

答案 5 :(得分:0)

您应该比较图像数据,而不是像上面提到的代码那样进行比较。

比较UIImage时要记住两件事,它们是

  1. 如果您对两个图像使用带有imageName的UIImage,则可以使用isEqual
  2. 然而,在不同情况下,您必须使用上述方式比较图像数据..