CGColorSpace
表示指定的颜色值
CGColorSpaceRef
//一个配置文件,指定如何解释显示的颜色值。
概述
颜色空间是多维的,每个维度表示特定的颜色分量。例如,RGB颜色空间的颜色有R,G,B三个三个维度.颜色空间的的每个维度强度由浮点值表示,其范围和含义取决于所讨论的颜色空间
我们通过正确指定的颜色空间可以确保图像具有一致的外观
Core Graphics
支持多种颜色空间:
- 与设备无关的颜色空间: 校准的色彩空间。 确保在不同设备上现实的颜色相同,
- 与设备相关的颜色空间: 依赖于设备的颜色空间与特定设备的颜色表示系统相关联。
- 特殊的颜色空间: 使用索引和对应的基色空间 索引颜色空间包含了最多256个颜色表以及每个颜色表的条目都制定基色空间的一种颜色
创建与设备无关的颜色空间
为了创建与设备无关的颜色空间,我们需要提供白色参考点,黑色参考点以及特殊设备的gamma值
创建标准的灰度色彩空间
CGColorSpaceCreateCalibratedGray
创建与设备无关的灰度颜色空间,表示相对于参考白点的颜色
CGColorSpaceRef CGColorSpaceCreateCalibratedGray(const CGFloat *whitePoint, const CGFloat *blackPoint, CGFloat gamma); whitePoint : 3个数字的数组,制定了在CIE 1931 XYZ-space颜色系统中漫反射白点的3刺激值 (对色彩学不熟悉)
blackPoint : 3个数字的数组,制定了在CIE 1931 XYZ-space颜色系统中漫反射黑点的3刺激值
gamma : 适合于成像设备的伽马值。
返回一个新的灰色色彩空间,需要主动调用`CGColorSpaceRelease`来释放创建校准的RGB颜色空间
CGColorSpaceCreateCalibratedRGB
创建与设备无关的RGB颜色空间,表示相对于参考白点的颜色。 此白点基于输出设备可以生成的最白光。 与设备无关的颜色空间中的颜色在不同设备上显示时应该相同,只要设备的功能允许。
对于需要详细伽玛的色彩空间,例如sRGB或ITU-R BT.709中使用的分段传递函数,可以使用函数CGColorSpaceCreateICCBased
,因为它可以准确地表示这些伽玛曲线。CGColorSpaceRef CGColorSpaceCreateCalibratedRGB(const CGFloat *whitePoint, const CGFloat *blackPoint, const CGFloat *gamma, const CGFloat *matrix); whitePoint:
blackPoint
gamma: 一个由3个数字组成的数组,用于指定颜色空间的红色,绿色和蓝色分量的伽玛值。
matrix: 9个数字的数组,指定相对于最终XYZ表示的颜色空间的伽马修改的RGB值的线性解释。
返回一个新的RGB色彩空间,需要主动调用`CGColorSpaceRelease`来释放创建根绝ICC颜色配置文件的规范
CGColorSpaceCreateICCBased
根据ICC颜色配置文件创建基于ICC的色彩空间
CGColorSpaceRef CGColorSpaceCreateICCBased(size_t nComponents, const CGFloat *range, CGDataProviderRef profile, CGColorSpaceRef alternate);
创建根据 CIE Lab标准与人类感知相关颜色
CGColorSpaceCreateLab
CIE L * a * b
*空间是Munsell颜色表示系统(一种通过色调,值和饱和度或“色度”值指定颜色的系统)的非线性变换,旨在将感知色差与定量距离相匹配 在色彩空间。 L *分量表示亮度值,a *分量表示从绿色到红色的值,b *分量表示从蓝色到黄色的值。 这大致对应于人脑被认为解码颜色的方式。 与设备无关的颜色空间中的颜色在不同设备上显示时应该相同,只要设备的功能允许。CGColorSpaceRef CGColorSpaceCreateLab(const CGFloat *whitePoint, const CGFloat *blackPoint, const CGFloat *range); whitePoint:
blackPoint:
range:一个由4个数字组成的数组,用于指定颜色空间的a *和b *组件的有效值范围。 a *组件表示从绿色到红色的值,b *组件表示从蓝色到黄色的值。
创建通用或者与设备相关的颜色空间
当在不同的输出设备上显示时,设备颜色空间中的颜色经常显得不同。 因此,在保持颜色很重要时,不建议使用设备颜色空间
CMYK颜色空间
CGColorSpaceRef CGColorSpaceCreateDeviceCMYK(void); 使用完后需要主动调用CGColorSpaceRelease进行释放
灰度颜色空间
CGColorSpaceRef CGColorSpaceCreateDeviceGray(void);
RGB颜色空间
CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void);
特定平台的颜色空间
CGColorSpaceRef CGColorSpaceCreateWithPlatformColorSpace(const void *ref); platformColorSpace:指向特定于平台的颜色空间的通用指针。 在macOS中,传递CMProfileRef-a ColorSync配置文件。 Quartz仅在函数调用期间使用此指针(和基础信息)
创建特殊颜色空间
创建索引颜色空间,由颜色查找表指定的颜色组成。
索引颜色空间包含最多255个条目的颜色表,以及颜色表条目映射到的基色空间。 颜色表中的每个条目都指定基色空间中的一种颜色。 索引颜色空间中的值被视为颜色空间的颜色表的索引。 表中的数据采用网格格式。 (例如,对于RGB颜色空间,值为R,G,B,R,G,B等。)
CGColorSpaceRef CGColorSpaceCreateIndexed(CGColorSpaceRef baseSpace, size_t lastIndex, const unsigned char *colorTable); baseSpace:颜色索引表基于的 基色颜色空间
lastIndex: 索引表的最大下标值 必须<=255
colorTable: m *(lastIndex + 1)个字节的数组,其中m是基色空间中的颜色分量数。 每个字节是0到255范围内的无符号整数,它被缩放到基色空间中相应颜色分量的范围。创建图案颜色空间
CGColorSpaceRef CGColorSpaceCreatePattern(CGColorSpaceRef baseSpace); baseSpace:对于蒙版图案,底层颜色空间指定要通过蒙版绘制的颜色。 对于彩色图案,您应该传递NULL。
创建指定类型的Quartz颜色空间
我们可以使用此函数创建通用的颜色空间等,查看Color Space Name
CGColorSpaceRef CGColorSpaceCreateWithName(CFStringRef name); name:颜色空间名称
颜色空间的引用和释放
//减少颜色空间的引用计数
void CGColorSpaceRelease(CGColorSpaceRef space);
//增加颜色空间的引用计数
CGColorSpaceRef CGColorSpaceRetain(CGColorSpaceRef space);