2013-10-29 58 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; 
    }