UIColor 和 CIColor 它们如何比较?拥有它们两个的目的是啥?
Posted
技术标签:
【中文标题】UIColor 和 CIColor 它们如何比较?拥有它们两个的目的是啥?【英文标题】:UIColor and CIColor how do they compare and what is the purpose of having two of them?UIColor 和 CIColor 它们如何比较?拥有它们两个的目的是什么? 【发布时间】:2016-08-11 06:23:20 【问题描述】:最近我遇到了一些尝试获取 UIColor 的 CIColor 属性失败的代码。 UIColor 被初始化为一个简单的 [UIColor blackColor] 并试图获取引发异常的 CIColor。
CIColor *aCIColor = [[UIColor blackColor] CIColor]; //fails
CIColor 和 UIColor 有什么区别,为什么会这样?
【问题讨论】:
【参考方案1】:CIColor 与 UIColor 一样,用于表示颜色的通道尺寸。
文档中的区别在于:
您将 CIColor 对象与其他 Core Image 类一起使用, 例如 CIFilter、CIContext 和 CIImage,以利用 处理图像时内置核心图像过滤器。
来自 WWDC 2013:
所以,因为,你知道,而且 CIColor 不处理色彩空间,它 不会做 CMYK 颜色,也不会做图案。
所以,这些都是你将失去的东西。
如果您认为您将需要它,那么可能不需要 正确的策略。
除了我之前已经回答过的方法之外,您可以通过创建黑色 UIColor 的 CGColor 来创建 CIColor,例如:
CIColor *color = [CIColor colorWithCGColor:[[UIColor blackColor] CGColor]];
【讨论】:
【参考方案2】:医生说
使用 AppKit 颜色对象初始化 Core Image 颜色对象。
所以你需要从NSColor
类创建CIColor
CIColor *aCIColor = [[CIColor alloc] initWithColor:[NSColor blackColor]];
UIColor
和 CIColor
之间的差异 UIColor
来自 UIKit
框架并在 iOS 中使用。来自文档Available in ios 2.0 and later
UIColor 对象表示颜色,有时表示不透明度(alpha 值)。 您可以使用 UIColor 对象来存储颜色数据,并在绘图期间 您可以使用它们来设置当前的填充和描边颜色
CIColor
来自 CoreImage
框架并在 Mac OSX 中使用 Available in OS X v10.4 and later
CIColor 类包含颜色值和颜色空间 颜色值有效。结合使用 CIColor 对象 与其他核心图像类,例如 CIFilter、CIContext 和 CIImage,利用内置的核心图像过滤器时 处理图像。
【讨论】:
【参考方案3】:UIImage 上CIColor
property 的文档说:
如果颜色对象未使用 Core Image 颜色初始化,则此属性会引发异常。
因此,如果您想访问 UIColor 的 CIColor,首先需要从 CIColor 创建它。
另一方面,您可以使用 initWithColor:
初始化程序从任何 UIColor 创建一个新的 CIColor:
CIColor *color = [[CIColor alloc] initWithColor:UIColor.blackColor];
【讨论】:
【参考方案4】:试试这个(快速版本)
var clcor = CIColor(color: UIColor.redColor())
对象:
CIColor *aCIColor = [[CIColor alloc] initWithColor:[NSColor blackColor]];
【讨论】:
以上是关于UIColor 和 CIColor 它们如何比较?拥有它们两个的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
CIColor 到 UIColor -> CIColor 没有为 UIColor UIExtendedSRGBColorSpace 定义