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)
做color1和color2代表相同的颜色?或者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)
现在做color1和color2代表相同的颜色?或者range参数是否将组件剪切color1为{50,10,10,1}?(如果是后者,重点是什么?对色域定义的粗略近似?确保值保持在与其他数据类型兼容的范围内?)
选项3:可能它在其他地方使用,例如在使用感知渲染意图进行色域映射时
对预期的L*a*b*值的范围有所了解可能有助于色域映射,特别是在感知情况下,但同样,这似乎是一个粗略的近似,我不明白为什么它会特别有用.
选项4:还有别的吗?
我做了一些测试,看起来答案是:
该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)
color1并color2代表相同的颜色.color3 似乎保留指定的组件值,即使它们超出了颜色空间指定的范围.最后,它看起来像{-127,127,-127,127}的范围规格导致颜色空间与a*和b*轴的标准CIELAB标度.
如果有人有更权威的答案,请发帖!
| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |