B.S*_*.S. 1 iphone compare objective-c uiimage ios
我已经在stackowerflow上阅读了很多关于解决方案的问题和答案,但仍然无法找到有助于解决我的问题的解决方案.
所以我有两个非常大的图像,我需要比较它们.
图像不是用imageNamed:它们创建的,所以它们没有兑现,所以[image1 isEqual:image2] 不应该工作.
根据我的理解比较它们的唯一解决方案就是这个:
- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
{
return [UIImagePNGRepresentation(image1) isEqual:UIImagePNGRepresentation(image2)];
}
Run Code Online (Sandbox Code Playgroud)
但是图像的尺寸非常大,因此需要一些时间进行比较.
是否有任何属性可以帮助不使用上述方法来检查它们是否相等?
例如,我可以得到image1.size并与之比较image2.size,它们不相等,我不需要运行上面的方法.有任何想法吗?谢谢.
如果你需要比较像素相等的图像,而不是指针,你可以这样做:
您可以在创建每个图像时为其创建某种哈希.例如,所有像素值的总和(可能是模数较大的数字;也许是由像素位置驱动).
然后,存储该值NSDictionary[image] = hashValue.然后,当你比较图像时,首先比较它们的大小,如你所提到的,然后,如果它们相等,则从字典中比较它们的哈希值.
如果它们相等,则图像最可能相等,但您必须手动检查它才能100%确定.
手动检查可能需要一些时间,因此您可以通过发明自己的统计数据来减少碰撞的概率(当不同的图像具有相同的哈希值时),例如更多的HASHES,不同的模数,散列的哈希值,左上角像素的值(开玩笑,但是谁知道......)等等.
很明显,你拥有的统计数据越多,你得到的碰撞就越少.实验领域:)
否则,只需比较它们的指针地址
if(image1 == image2) {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |