为什么需要在图像格式之间进行如此频繁的转换?(UIImage,CGImage,CIImage)

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不为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值...

1个回答

0
原因在于概念上的不同。UIKit、CoreGraphics 和 CoreImage 三个框架所做的事情根本不同,因此不可能有一个“大一统的图像格式”。尽管这些框架之间相互协作良好,但转换应该尽可能地优化和快速,当然,图像处理始终是一项相对计算密集的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接