Quartz 2D:CGColorSpaceCreateLab:范围参数的用途?

SWB*_*SWB 7 core-graphics colors quartz-graphics

在Quartz 2D中,该CGColorSpaceCreateLab()函数采用range如下定义的参数:

CGFloat范围[4]: 4个数字的数组,用于指定颜色空间的a*和b*分量的有效值范围.a*组件表示从绿色到红色的值,b*组件表示从蓝色到黄色的值.

问题是,这个参数实际上做了什么?

我可以想到至少三种可能的情况.

选项1:可能会缩放组件值

假设我有两个不同范围的颜色空间:

CGFloat range1[] = {  -10,  10,  -10,  10 };
CGFloat range2[] = { -100, 100, -100, 100 };
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1);
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2);
Run Code Online (Sandbox Code Playgroud)

我创建具有相同组件值的颜色,并在每个空间的指定范围内:

CGFloat components[] = { 50, 10, 10, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);
Run Code Online (Sandbox Code Playgroud)

color1color2代表相同的颜色?或者range参数是否以某种方式缩放组件,使这两种颜色不同?(如果是后者,range对应于标准CIELAB坐标缩放的值是多少?

选项2:可能它会剪切组件值

鉴于上面定义的两个空格,请说我创建以下颜色:

CGFloat components[] = { 50, 50, 50, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);
Run Code Online (Sandbox Code Playgroud)

现在做color1color2代表相同的颜色?或者range参数是否将组件剪切color1为{50,10,10,1}?(如果是后者,重点是什么?对色域定义的粗略近似?确保值保持在与其他数据类型兼容的范围内?)

选项3:可能它在其他地方使用,例如在使用感知渲染意图进行色域映射时

对预期的L*a*b*值的范围有所了解可能有助于色域映射,特别是在感知情况下,但同样,这似乎是一个粗略的近似,我不明白为什么它会特别有用.

选项4:还有别的吗?

SWB*_*SWB 7

我做了一些测试,看起来答案是:

range参数缩放a*和b*组件值.

另外,元件值都不会出现被裁剪到指定的范围内.

所以在下面的例子中:

CGFloat range1[] = {  -10,  10,  -10,  10 };
CGFloat range2[] = { -100, 100, -100, 100 };
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1);
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2);

CGFloat components1[] = { 50, 10, 10, 1 };
CGColorRef color1 = CGColorCreate(space1, components1);

CGFloat components2[] = { 50, 100, 100, 1 };
CGColorRef color2 = CGColorCreate(space2, components2);

CGColorRef color3 = CGColorCreate(space1, components2);
Run Code Online (Sandbox Code Playgroud)
  • color1color2代表相同的颜色.
  • color3 似乎保留指定的组件值,即使它们超出了颜色空间指定的范围.

最后,它看起来像{-127,127,-127,127}的范围规格导致颜色空间与a*和b*轴的标准CIELAB标度.

如果有人有更权威的答案,请发帖!