Core Graphics的研究CGColorSpace篇

CGColorSpace

指定如何解释显示颜色值的配置文件。

颜色空间是多维的,每个维度代表一个特定的颜色组件。例如,RGB颜色空间中的颜色有三个维度或组件,分别为红色、绿色和蓝色。每个分量的强度由浮点值表示,它们的范围和意义取决于所讨论的颜色空间。

不同类型的设备(扫描仪、监视器、打印机)在不同的颜色空间(RGB、CMYK、灰度)内工作。此外,同一类型的两个设备(例如,来自不同制造商的彩色显示器)可以在同一种颜色空间内工作,但仍然产生不同的颜色范围或色域。正确指定的颜色空间可确保图像具有一致的外观,而不管输出设备如何。

CoreGraphics支持多种颜色空间:

  • 校准后的颜色空间确保在不同设备上显示的颜色相同。在设备允许的范围内,颜色的视觉外观保持不变。
  • 与设备相关的颜色空间与特定设备的颜色表示系统相关联。当高保真度色彩保存很重要时,不建议使用设备色彩空间。
  • 特殊的颜色空间---索引和图案,索引颜色空间包含一个最多包含256个项的颜色表和一个颜色表项映射到的基色空间。颜色表中的每个条目在基色空间中指定一种颜色。当抚摸或填充图案时,使用图案颜色空间。

创建与设备无关的颜色空间

1. CGColorSpaceCreateCalibratedGray(创建已校准的灰度颜色空间)

/*
参数介绍
1. whitePoint:一个由3个数字组成的数组,在CIE 1931 XYZ空间中指定漫反射白点的三刺激值;
2. blackPoint:一个由3个数字组成的数组,在CIE 1931 XYZ空间中指定漫射黑点的三刺激值;
3. gamma:适用于成像设备的伽马值;
*/
CGColorSpaceRef CGColorSpaceCreateCalibratedGray(const CGFloat *whitePoint, const CGFloat *blackPoint, CGFloat gamma);

返回值:一个新的校准灰色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

2. CGColorSpaceCreateCalibratedRGB(创建已校准的RGB颜色空间)

/*
参数介绍
1.whitePoint: 一个由3个数字组成的数组,在CIE 1931 XYZ空间中指定漫反射白点的三刺激值;
2.blackPoint: 一个由3个数字组成的数组,在CIE 1931 XYZ空间中指定漫射黑点的三刺激值;
3.gamma: 由3个数字组成的数组,指定颜色空间的红色、绿色和蓝色分量的gamma;
4.matrix: 由9个数字组成的数组,指定颜色空间的gamma修改RGB值相对于最终XYZ表示的线性解释;
*/
CGColorSpaceRef CGColorSpaceCreateCalibratedRGB(const CGFloat *whitePoint, const CGFloat *blackPoint, const CGFloat *gamma, const CGFloat *matrix);

返回值:一个新的校准RGB颜色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL。

3. CGColorSpaceCreateICCBased(创建根据ICC颜色配置文件规范定义的独立于设备的颜色空间)

/*
参数介绍
1.nComponents:ICC配置文件数据定义的颜色空间中颜色组件的数目。这必须与ICC配置文件中实际的组件数匹配,并且必须等于1、3或4;
2.range:指定相应颜色组件的最小和最大有效值的数字数组。数组的大小是组件数量的两倍。如果c[k]是k颜色分量,则有效范围为range[2*k]≤c[k]≤range[2*k+1];
3.profile: 提供ICC配置文件的数据提供者;
4.alternateSpace: 在不支持ICC配置文件的情况下使用的备用颜色空间。替换颜色空间必须具有nComponents 颜色组件。必须提供备用颜色空间。如果此参数为空,则函数返回空
*/
CGColorSpaceRef CGColorSpaceCreateICCBased(size_t nComponents, const CGFloat *range, CGDataProviderRef profile, CGColorSpaceRef alternate);

返回值:一个新的基于ICC的颜色空间对象。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

4.CGColorSpaceCreateLab(根据CIE L*a*b*标准,创建与设备无关的颜色空间,该空间与人类的颜色感知有关)

/*
参数介绍
1.whitePoint:一个由3个数字组成的数组,在CIE 1931 XYZ空间中指定漫反射白点的三刺激值;
2.blackPoint:一个由3个数字组成的数组,在CIE 1931 XYZ空间中指定漫射黑点的三刺激值;
3.range:由4个数字组成的数组,指定颜色空间的a*和b*分量的有效值范围。a*组件表示从绿色到红色的值,b*组件表示从蓝色到黄色的值;
*/
CGColorSpaceRef CGColorSpaceCreateLab(const CGFloat *whitePoint, const CGFloat *blackPoint, const CGFloat *range);

返回值:新的L*A*b*颜色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

创建通用或依赖于设备的颜色空间

1. CGColorSpaceCreateDeviceCMYK(创建依赖于设备的CMYK颜色空间)

CGColorSpaceRef CGColorSpaceCreateDeviceCMYK(void);

返回值:依赖于设备的CMYK颜色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

2. CGColorSpaceCreateDeviceGray(创建依赖于设备的灰度颜色空间)

CGColorSpaceRef CGColorSpaceCreateDeviceGray(void);

返回值:依赖于设备的灰色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

3.CGColorSpaceCreateDeviceRGB(创建与设备相关的RGB颜色空间)

CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void);

返回值:依赖于设备的RGB颜色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL。

4. CGColorSpaceCreateWithPlatformColorSpace(创建平台特定的颜色空间)

/*
参数介绍
1.platformColorSpace:指向平台特定颜色空间的通用指针。在macOS中,传递CMProfileRef-a ColorSync配置文件。Quartz只在函数调用期间使用这个指针(和底层信息);
*/
CGColorSpaceRef CGColorSpaceCreateWithPlatformColorSpace(const void *ref);

返回值:新的颜色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

创建特殊颜色空间

1. CGColorSpaceCreateIndexed(创建索引颜色空间,由颜色查找表指定的颜色组成)

/*
参数介绍
1.baseSpace:颜色表所基于的颜色空间;
2.lastIndex:颜色表的最大有效索引值。该值必须小于或等于255;
3.colorTable:m*(lastIndex+1)字节的数组,其中m是基色空间中颜色分量的数目。每个字节都是0到255范围内的无符号整数,它被缩放到基色空间中相应颜色分量的范围内;
*/
CGColorSpaceRef CGColorSpaceCreateIndexed(CGColorSpaceRef baseSpace, size_t lastIndex, const unsigned char *colorTable);

返回值:一个新的索引颜色空间对象。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

2. CGColorSpaceCreatePattern(创建图案颜色空间)

/*
参数介绍
1.baseSpace:对于遮罩图案,指定要通过遮罩绘制的颜色的基础颜色空间。对于彩色图案,应传递空值;
*/
CGColorSpaceRef CGColorSpaceCreatePattern(CGColorSpaceRef baseSpace);

返回值:一种新的图案色彩空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

3.CGColorSpaceCreateWithName(创建指定类型的Quartz 颜色空间)

/*
参数介绍
1.name: 颜色空间名称。有关有效石英定义名称的列表
*/
CGColorSpaceRef CGColorSpaceCreateWithName(CFStringRef name);

返回值:新的通用颜色空间。需要通过调用cgcolorspacelease释放此对象。如果不成功,则返回NULL

获取有关颜色空间的信息

1. CGColorSpaceCopyICCProfile(返回所提供颜色空间的ICC配置文件的副本)

此方法已被弃用, 可以用CGColorSpaceCopyICCData 来代替

/*
参数介绍
1.space: 要获取其ICC配置文件的颜色空间
*/
CFDataRef CGColorSpaceCopyICCProfile(CGColorSpaceRef space);

返回值:ICC配置文件,如果颜色空间没有ICC配置文件,则为空

2. CGColorSpaceCopyICCData(返回所提供颜色空间的ICC配置文件数据的副本)

/*
参数介绍
1.space: 要获取其ICC配置文件的颜色空间
*/
CFDataRef CGColorSpaceCopyICCData(CGColorSpaceRef space);

返回值:ICC配置文件数据,如果颜色空间没有ICC数据配置文件,则为空

3. CGColorSpaceSupportsOutput(返回一个布尔值,指示颜色空间是否可以用作目标颜色空间)

/*
参数介绍
1.space:颜色空间
*/
bool CGColorSpaceSupportsOutput(CGColorSpaceRef space);

返回值:如果颜色空间可以用作目的地,则为“是”,否则为“否”。

4. CGColorSpaceGetNumberOfComponents(返回颜色空间中颜色组件的数目)

/*
参数介绍
1.space: 要检查的颜色空间
*/
size_t CGColorSpaceGetNumberOfComponents(CGColorSpaceRef space);

返回值:指定颜色空间中的颜色组件数,不包括alpha值

5. CGColorSpaceGetTypeID(返回Quartz 颜色空间的核心基础类型标识符)

CFTypeID CGColorSpaceGetTypeID(void);

返回值:不透明类型CGColorSpaceRef的标识符

6. CGColorSpaceGetModel(返回所提供颜色空间的颜色空间模型)

/*
参数介绍
1.space:颜色空间对象
*/
CGColorSpaceModel CGColorSpaceGetModel(CGColorSpaceRef space);

返回值:CGColorSpaceModel中描述的常数之一。

7. CGColorSpaceIsWideGamutRGB(返回RGB颜色空间是否覆盖NTSC色域的很大一部分)

/*
参数介绍
1.CGColorSpaceRef:颜色空间对象
*/
bool CGColorSpaceIsWideGamutRGB(CGColorSpaceRef);

返回值:如果颜色空间大于NTSC色域的85%,则为“是”,否则为“否”。

8. CGColorSpaceGetBaseColorSpace(返回图案或索引颜色空间的基色空间)

/*
参数介绍
1.space:图案或索引颜色空间的颜色空间对象
*/
CGColorSpaceRef CGColorSpaceGetBaseColorSpace(CGColorSpaceRef space);

返回值:如果空间参数是图案或索引颜色空间,则为基色空间;否则为空。

9. CGColorSpaceGetColorTableCount(返回索引颜色空间的颜色表中的条目数)

/*
参数介绍
1.space:索引颜色空间的颜色空间对象
*/
size_t CGColorSpaceGetColorTableCount(CGColorSpaceRef space);

返回值:如果颜色空间是索引颜色空间,则返回空间参数颜色表中的条目数;否则,返回0

10. CGColorSpaceGetColorTable(复制索引颜色空间的颜色表中的项)

/*
参数介绍
1.space:索引颜色空间的颜色空间对象
2.table:表所指向的数组应至少与颜色表中的条目数相同大。在输出时,数组包含与传递给CGColorSpaceCreateIndexed的格式相同的表数据
*/
void CGColorSpaceGetColorTable(CGColorSpaceRef space, uint8_t *table);

11. CGColorSpaceCopyName(返回用于创建指定颜色空间的名称)

/*
参数介绍
1.space:要返回名称的颜色空间
*/
CFStringRef CGColorSpaceCopyName(CGColorSpaceRef space);

返回值:用于创建指定颜色空间的名称,如果颜色空间不是使用CGColorSpaceCreateWithName函数创建的,则为空。

 

保留和释放色彩空间

1. CGColorSpaceRelease(减少颜色空间的retain 计数)

/*
参数介绍
1.space:要释放的 Quartz 颜色空间
*/
void CGColorSpaceRelease(CGColorSpaceRef space);

2. CGColorSpaceRetain(增加颜色空间的retain 计数)

/*
参数介绍
1.space: 要保留的 Quartz 颜色空间
*/
CGColorSpaceRef CGColorSpaceRetain(CGColorSpaceRef space);

返回值:与space参数传入的颜色空间相同的颜色空间

数据类型

1. CGColorSpaceModel(颜色空间模型)

typedef enum CGColorSpaceModel : int32_t {
    ...
} CGColorSpaceModel;

2.CGColorRenderingIntent(处理不在图形上下文的目标颜色空间中的颜色的选项)

typedef enum CGColorRenderingIntent : int32_t {
    ...
} CGColorRenderingIntent;

呈现意图指定Quartz应如何处理不在图形上下文的目标颜色空间范围内的颜色。它确定用于将颜色从一个颜色空间映射到另一个颜色空间的精确方法。如果未通过调用函数CGContextSetRenderingIntent显式设置渲染意图,则图形上下文将使用相对比色渲染意图,除非在绘制采样图像时

3. CGColorSpaceRef(指定如何解释显示颜色值的配置文件)

typedef struct CGColorSpace CGColorSpaceRef;

4. Color Space Names(常用颜色空间的方便常数)

颜色空间名称常量可以作为参数传递给函数cgcolorspacecoreatewithname。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值