繁体   English   中英

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

[英]Why is there so much converting between image formats needed? (UIImage, CGImage, CIImage)

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

和人脸检测工作正常。 Arrgh! 我确定[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;  

所以我猜这是关键 - 开发者要小心 :测试没有...

原因在于构思。 所有的UIKit,CoreGraphics和CoreImage都做了三件根本不同的事情,那就是不能成为“宏大的中央统一图像格式”。 而且,这些框架合作得很好; 也就是说,转换应该尽可能优化和尽可能快,但当然图像处理总是一个计算成本相对较高的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM