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
框架的UIColor
和CIColor
之间的差异以及在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]];