![](/img/trans.png)
[英]Is there any way to convert CIImage to NSData without converting CIImage to UIImage or CGImage?
[英]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.