2013-10-29 59 views
4

最近我发现有关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 
} 

在正常运行上述代码工作正常。

但是,一旦将应用程序发送到后台,应用程序就会处于活动状态,但它无法正常工作。

+1

您初始化一个'UIImage'比较比较?看起来消耗内存。 – Raptor

+0

你比较图像的名称,所以为什么不尝试isEqualToString: –

+0

它不是内存问题。它也不适用于小图片。 – swamy

回答

10

一般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

另外2行代码......但它工作得很好。 – swamy

0

你应该比较喜欢,而不是你提到的上面的代码比较图像数据..

有两件事情要记住,当比较UIImage的,他们是

  1. 如果你正在使用的UIImage与imageName两个图像,你可以使用的isEqual
  2. 然而,在不同的情况下,你必须代之以使用上述方法比较图像数据..
1

的IOS会智能重复使用的图片,并没有使新的,如果它可以重复使用相同的图像。这就是为什么你的比较工作一段时间。这是一种不好的技术,不应该依赖。

保持对用于生成第一个图像的字符串的引用,并比较它是否包含image.png,会更好。

@property NSString *imageName; 

那么当您创建的UIImage,用[UIImage的imageNamed:yourNameString]你可以保存imageName = yourNameString使用的字符串;

再后来,只需检查

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

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

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 
} 
+1

你从哪里得到宽度,高度和'getRGBForX'? –

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; 
    }