【问题标题】:Quartz 2D: CGColorSpaceCreateLab: Purpose of range parameter?Quartz 2D:CGColorSpaceCreateLab:范围参数的用途?
【发布时间】:2009-10-05 23:38:04
【问题描述】:

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

CGFloat range[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);

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

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:其他?

【问题讨论】:

    标签: colors core-graphics


    【解决方案1】:

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

    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 比例。

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

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2013-12-29
      • 2017-03-01
      • 1970-01-01
      • 2014-01-25
      相关资源
      最近更新 更多