colors - quartz 2D : CGColorSpaceCreateLab: Purpose of range parameter?

标签 colors core-graphics

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

CGFloat range[4]: An array of 4 numbers that specify the range of valid values for the a* and b* components of the color space. The a* component represents values running from green to red, and the b* component represents values running from blue to yellow.

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

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

选项 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);

我使用相同的分量值并在每个空间的指定范围内创建颜色:

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

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

选项 2:也许它会剪辑组件值

鉴于上面定义的两个空间,假设我创建以下颜色:

CGFloat components[] = { 50, 50, 50, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);

现在 color1color2 代表相同的颜色吗?或者 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);
  • color1color2 表示相同的颜色。
  • color3 似乎保留了指定的组件值,即使它们超出了颜色空间指定的范围。

最后,看起来 { -127, 127, -127, 127 } 的范围规范会产生 a* 和 b* 轴具有标准 CIELAB 比例的颜色空间。

如果谁有更权威的答案,请留言!

关于colors - quartz 2D : CGColorSpaceCreateLab: Purpose of range parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522937/

相关文章:

css - 使用 Blueprint CSS 框架时如何创建不带交替行颜色的表格?

c# - 如何通过 GetPixel 方法比较颜色和通过 Color.Black 等方法传递的颜色?

cocoa - 如何将 NSImageView 图层保存为磁盘上的 PNG 格式?

javascript - 如何获得十六进制颜色值而不是 RGB 值?

php - 将值映射到色标

ios - 从 -drawRewct : using CoreGraphics 调用回调方法

iphone - UIImageView将图像过滤为纯色

ios - 绘制同心圆: Inner circle should be filled

ios - UIBezierPath动画下的渐变

javascript - P5.js - 填充颜色为 'n %'