5

我很困惑为什么在 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;  

所以我想这是关键 -开发人员当心:测试为零......

4

1 回答 1

0

原因在于观念。所有 UIKit、CoreGraphics 和 CoreImage 都做了三个根本不同的事情,以至于不可能有一个“大中央统一的图像格式”。此外,这些框架配合得很好;也就是说,转换应该尽可能优化和尽可能快,但当然图像处理始终是计算量相对较大的操作。

于 2012-07-12T20:26:43.677 回答