我很困惑为什么在 iOS 中需要在图像格式之间进行如此多的转换。例如,如果我将 jpg 加载到 UIImage 中,然后想对其进行人脸检测,我需要创建一个 CIImage 以传递给 CIDetector。这不代表内存和性能都受到打击吗?
这是Core Graphics,Core Image和UIKit(可能还有openGL ES,但我不使用它)之间的一些遗留问题吗?整体命中是微不足道的吗?
我会做我需要做的,但我想更多地了解这是需要的。此外,我有时在进行转换时遇到问题,并且纠结于格式之间的差异。
更新
好的 - 所以我对这些格式的困惑(或这些格式的困惑......)再次感到困惑。浪费了半个小时。这是我正在做的事情:
在本地图像中测试人脸,我创建了所需的 CIImage:
CIImage *ciImage = [image CIImage];
并且无论我传入什么方向,都没有恢复任何功能。我知道这个特定的图像与CIDetectorTypeFace
以前的图像一起使用,并且CIImage
我在格式上遇到了问题。尝试像这样创建 CCImage:
CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
和人脸检测工作正常。啊!我确保[image CIImage]
生成的 CIImage 不为零。所以我很困惑。第一种方法只是获取一个指针,而第二种方法创建一个新的 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;
所以我想这是关键 -开发人员当心:测试为零......