我对iOS中为什么需要这么多图像格式的转换感到困惑。例如,如果我将jpg加载到UIImage中,然后想在其上进行面部检测,我需要创建一个CIImage传递给CIDetector。这不会对内存和性能造成影响吗?
这是Core Graphics、Core Image和UIKit之间的一些遗留问题(可能还包括openGL ES,但我不使用它)吗?整体影响微不足道吗?
我会按照需要做,但我想更多地了解这是必需的原因。此外,有时候我会遇到转换问题,并且会陷入这些格式之间的差异。
更新:
好的,所以我又因为对这些格式的混淆而被扣分了...浪费了半个小时。这是我正在做的事情:
在本地图像中测试面部,我使用以下方法创建所需的CIImage:
这是Core Graphics、Core Image和UIKit之间的一些遗留问题(可能还包括openGL ES,但我不使用它)吗?整体影响微不足道吗?
我会按照需要做,但我想更多地了解这是必需的原因。此外,有时候我会遇到转换问题,并且会陷入这些格式之间的差异。
更新:
好的,所以我又因为对这些格式的混淆而被扣分了...浪费了半个小时。这是我正在做的事情:
在本地图像中测试面部,我使用以下方法创建所需的CIImage:
CIImage *ciImage = [image CIImage];
无论我传入什么方向,都没有得到任何功能。我知道这张特定的图像之前已经与CIDetectorTypeFace
一起使用过,并且我遇到了CIImage
格式的问题。我尝试按照以下方式创建CCImage:
CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
面部检测正常工作。糟糕!我用[image CIImage]
确保结果CIImage不为nil。所以我很困惑。第一种方法只获取指针,而第二种方法创建一个新的CIImage。这有什么区别吗?
深入查看UIImage.h文件,我看到以下内容:
// returns underlying CGImageRef or nil if CIImage based
@property(nonatomic,readonly) CGImageRef CGImage;
// returns underlying CIImage or nil if CGImageRef based
@property(nonatomic,readonly) CIImage *CIImage;
所以我想这就是关键——开发者要注意:测试nil值...