UIColor和CIColor他们如何比较,有两个人的目的是什么?

最近我遇到了一些试图获取UIColor的CIColor属性失败的代码。 UIColor初始化为一个简单的[UIColor blackColor]并试图获得CIColor引发exception。

CIColor *aCIColor = [[UIColor blackColor] CIColor]; //fails 

CIColor和UIColor有什么区别?为什么会这样?

与UIColor一样,CIColor用于表示颜色的通道尺寸。

文档的不同之处在于:

在处理图像时,可以将CIColor对象与其他Core Image类(如CIFilter,CIContext和CIImage)结合使用,以利用内置的Core Imagefilter。

来自WWDC 2013:

所以,因为,你知道,而且CIColor不处理色彩空间,它不会做CMYK色,也不会做模式。

所以,这些都是你将要失去的东西。

如果您认为自己需要这样,那么可能不是正确的策略。

另一种方法,除了我之前已经回答的问题,你可以通过创建黑色UIColor的CGColor创建CIColor,如:

 CIColor *color = [CIColor colorWithCGColor:[[UIColor blackColor] CGColor]]; 

医生说

使用AppKit颜色对象初始化Core Image颜色对象。

所以你需要从NSColor类创建CIColor

 CIColor *aCIColor = [[CIColor alloc] initWithColor:[NSColor blackColor]]; 

来自UIKit框架的UIColorCIColor之间的差异以及在iOS中的使用。 来自Available in iOS 2.0 and later Doc Available in iOS 2.0 and later

UIColor对象表示颜色,有时表示不透明度(alpha值)。 您可以使用UIColor对象存储颜色数据,在绘图过程中,您可以使用它们来设置当前的填充和描边颜色

来自CoreImage框架的CoreImage和在Mac OSX中使用Available in OS X v10.4 and later

CIColor类包含颜色值和颜色值有效的颜色空间。 在处理图像时,可以将CIColor对象与其他Core Image类(如CIFilter,CIContext和CIImage)结合使用,以利用内置的Core Imagefilter。

UIImage上CIColor 属性的文档说:

如果未使用Core Image颜色初始化颜色对象,则此属性将引发exception。

因此,如果您想要访问UIColor的CIColor,首先需要从CIColor创建它。

另一方面,您可以使用initWithColor: initializer从任何UIColor创建一个新的CIColor:

 CIColor *color = [[CIColor alloc] initWithColor:UIColor.blackColor]; 

试试这个(快捷版)

  var clcor = CIColor(color: UIColor.redColor()) 

obj:

 CIColor *aCIColor = [[CIColor alloc] initWithColor:[NSColor blackColor]];