每个等色性体是一个不规则四面体,例如第一个等色性体占据的顶点是黑、红、黄、白,其中颜色是明暗不等的红橙黄,最亮可以到白最暗到黑。直观的很还是不需多解释。自己可以试把各个等色性体分别画出来。六个等色性体是形状完全相同的空间立体,六个正好精确的拼成立方体。
还有一个图是调色帖中改进算法对应的色相范围(在 RGB 空间中映射为 R、G、B 颜色条件)。我们说过它的条件是 R > G > b 与 2*R > G > R > B 的合集,在 RGB 颜色空间中就是第一个等色性体与第二个等色性体前一半的拼合。两者都是 RGB 空间的四面体,本来八个面,一对重合抵消,一对共面合成一个,剩下的是不规则五面体(四棱锥)。自己想象一下,四个这样相同形状的四棱锥正好纹丝不差的拼满整个立方体。
那么大家一定要问,那么到底 RGB 与 HSB 属性变量转换的数学公式是什么。因为在上面的分析中我们看到,几乎所有的属性映射都市分段的,那么可想而知,RGB 与 HSB 的转换公式也不可能是一个简单的单一函数,它是分段描述,分条件计算的。实际上它与其说一个公式更适合用一小段程序的形式描述,基本上不是计算而是逻辑判断。我感觉用图示更能表示清楚——事实上前面几张土中已经可以概括出两个颜色空间属性坐标的转换关系了。
同样的功能函数可以写成很多等价的形式,用类 JScript 语句写可以写成下面样子。这是 HSB -> RGB 的转换函数,是早期从类 C 格式转写的(比较简洁的形式),关键就是最后一个长语句,前面的都是铺垫。这个函数基本上可以直接在网页中调用。
function hsv2rgb(h, s, v) { if (s == 0) { if (h == null) return [v, v, v]; else return null; } else { if (h == 360) h = 0; h /= 60; var i= Math.floor(h); var f= h - i; var p= v * (1 - s); var q= v * (1 - (s*f)); var t= v * (1 - (s * (1-f))); return [[v,t,p], [q,v,p], [p,v,t], [p,q,v], [t,p,v], [v,p,q]][i]; } }
【十二】从开始对 HS* 与 RGB 颜色空间的问题发生疑问和兴趣,到得到基本清晰的理解,我断断续续用了两年时间。中间不断被其他问题涉及到而想起,前后有不下十篇笔记,至少十多万字篇幅讨论相关内容,在正确与错误、理解与不理解之间颠倒反复。困难的是没有相关资料,没有人讨论,甚至没有用来描述现象和规律的概念,基本是一个盲区。理论的资料不少但是纯粹抽象的理论(网上流传的理论内容也有大量讹误,难讲是正确部分多还是错误部分多),不会有人结合到 PhotoShop 具体使用中的复杂变化,而 PhotoShop 的资料又不涉及正规理论。
想把 Adobe 藏起来的东西挖掘出来,还真是够刺激。
上面内容是笔记主要部分,与大家探讨切磋,欢迎质疑、批评、指正。因为颜色空间理论的基础地位,这个问题涉及的范围极其广泛,无论在哪个方向上稍加深入,不是一本书也是半本书,而且恐怕会把 PhotoShop 中所有主要内容的问题全勾连进来。为把一个问题说清楚,不能不人为划定一个界限,到此止步不再深入。写这篇东西也一样,不是教程而是讨论,但是我相信对于擅长形象思维的艺类朋友来说,这次不会说想不通了吧。
【完】 |