最近我发现了一个关于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
}
在正常运行中,上面的代码工作正常。
但是当应用程序一旦被发送到后台,它就无法工作。
答案 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时要记住两件事,它们是