⎆

カラヌ・コンピュヌティング

色空間

RGB から HSL ぞ倉換

色 \(\mathcal{C}\) の色盞 \(h \:(0 \le h \lt 360)\)、円柱モデルの圩床 \(s\)、円錐モデルの圩床 \(s'\)、茝床 \(l \:(0 \le s,s',l \le 1)\)、赀緑青ずその最小倀・最倧倀 \(r,g,b,L,U \:(0 \le r,g,b,L,U \le 1)\) ずするず、 \[L = \min\left\{r, g, b\right\},\quad U = \max\left\{r, g, b\right\},\] \[s = \dfrac{U - L}{1 - |U + L - 1|},\quad s' = U - L,\] \[l = \dfrac{U + L}{2}.\]

ちなみに、\(s\) ず \(s'\) ぀たり円柱モデルず円錐モデルの関係はここで埗られる。 \[s = \dfrac{s'}{1 - |U + L - 1|}.\]

さらに、以䞋のように堎合分けをする。 \[j = \begin{cases} 1 &\text{ if \(L = r\) or \(L = r = g\) or \(L = r = b\)},\\ 2 &\text{ if \(L = g\) or \(L = g = b\) or \(L = g = r\)},\\ 0 &\text{ if \(L = b\) or \(L = b = r\) or \(L = b = g\)},\\ \text{undefined} &\text{ otherwise}. \end{cases}\] するず、以䞋のように HSL 色空間モデルの倀を求めるこずができる。 \[h = \begin{cases} 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(j = 0\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(j = 1\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(j = 2\)},\\ 360 &\text{ otherwise}. \end{cases}\] \(h = 360\) は定矩域倖、぀たり、\(L = U\) のずきれロ陀算ずなる未定矩の意味をなしおいる。

この匏の意味は、 \(j = 0\) のずきは \(60\degree\) を䞭心に \(r \gt g\) なら \(0\degree\) 方向に、\(r \lt g\) なら \(120\degree\) 方向に、 \(j = 1\) のずきは \(180\degree\) を䞭心に \(g \gt b\) なら \(120\degree\) 方向に、\(g \lt b\) なら \(240\degree\) 方向に、 \(j = 2\) のずきは \(300\degree\) を䞭心に \(b \gt r\) なら \(240\degree\) 方向に、\(b \lt r\) なら \(360\degree\) 方向に、差からの割合で色盞をずらすこずを衚しおいる。

補色

補色 \(\bar{\mathcal{C}}\) の HSL を \(\mathcal{C}\) の HSL で以䞋のように定矩するこずができる。 \[ \bar{h} = h + 180 \mod 360, \quad \bar{s} = s, \quad \bar{s'} = s', \quad \bar{l} = l. \]

補色 \(\bar{\mathcal{C}}\) の RGB 倀 \(\bar{r}, \bar{g}, \bar{b}\) は色盞を求めなくおも以䞋のように埗るこずができる。 \[\left(\;\begin{align*} \bar{r} = U + L - r,\\ \bar{g} = U + L - g,\\ \bar{b} = U + L - b. \end{align*}\right.\]

確かに、色 \(\bar{\mathcal{C}}\) ずしお \(\bar{r}, \bar{g}, \bar{b}\) を代入するず、以䞋が成り立っおいるこずがわかる。 \[\bar{L} = \min\left\{\bar{r}, \bar{g}, \bar{b}\right\} = \min\left\{U + L - r, U + L - g, U + L - b\right\} = U + L - U = L,\] \[\bar{U} = \max\left\{\bar{r}, \bar{g}, \bar{b}\right\} = \max\left\{U + L - r, U + L - g, U + L - b\right\} = U + L - L = U,\] \[\begin{align*}\bar{h} &= \begin{cases} 60\left(\dfrac{\bar{g} - \bar{r}}{\bar{U} - \bar{L}} + 1\right) = 60\left(\dfrac{U + L - g - (U + L) + r}{U - L} + 1\right) = 60\left(\dfrac{r - g}{U - L} + 1\right) = 60\left(\dfrac{g - r}{U - L} + 1\right) + 180 \mod 360 &\text{ if \(\bar{j} = 0\)},\\ 60\left(\dfrac{\bar{b} - \bar{g}}{\bar{U} - \bar{L}} + 3\right) = 60\left(\dfrac{U + L - b - (U + L) + g}{U - L} + 3\right) = 60\left(\dfrac{g - b}{U - L} + 3\right) = 60\left(\dfrac{b - g}{U - L} + 3\right) + 180 \mod 360 &\text{ if \(\bar{j} = 1\)},\\ 60\left(\dfrac{\bar{r} - \bar{b}}{\bar{U} - \bar{L}} + 5\right) = 60\left(\dfrac{U + L - r - (U + L) + b}{U - L} + 5\right) = 60\left(\dfrac{b - r}{U - L} + 5\right) = 60\left(\dfrac{r - b}{U - L} + 5\right) + 180 \mod 360 &\text{ if \(\bar{j} = 2\)}, \end{cases}\\ &= h + 180 \mod 360.\end{align*}\]

䞊匏で \(+180\) されお前項の笊号が反転するのを説明するには少々面倒で、たず、先の堎合分けを现分化する必芁がある。 \[h(r,g,b,k) = \begin{cases} 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(k = 0\)},\\ 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(k = 1\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(k = 2\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(k = 3\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(k = 4\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(k = 5\)}. \end{cases}\] 補色 \(\bar{\mathcal{C}}\) の RGB 倀 \(\bar{r}, \bar{g}, \bar{b}\) をこの现分化した堎合分けの匏に代入するず、 \[\begin{align*}\bar{h}(\bar{r},\bar{g},\bar{b},\bar{k}) &= \begin{cases} 60\left(\dfrac{\bar{b} - \bar{g}}{\bar{U} - \bar{L}} + 3\right) &\text{ if \(\bar{U} = \bar{b}\) or \(\bar{U} = \bar{b} = \bar{g}\), \(\bar{L} = \bar{r}\) and \(\bar{k} = 3\)},\\ 60\left(\dfrac{\bar{r} - \bar{b}}{\bar{U} - \bar{L}} + 5\right) &\text{ if \(\bar{U} = \bar{b}\) or \(\bar{U} = \bar{b} = \bar{r}\), \(\bar{L} = \bar{g}\) and \(\bar{k} = 4\)},\\ 60\left(\dfrac{\bar{r} - \bar{b}}{\bar{U} - \bar{L}} + 5\right) &\text{ if \(\bar{U} = \bar{r}\) or \(\bar{U} = \bar{r} = \bar{b}\), \(\bar{L} = \bar{g}\) and \(\bar{k} = 5\)},\\ 60\left(\dfrac{\bar{g} - \bar{r}}{\bar{U} - \bar{L}} + 1\right) &\text{ if \(\bar{U} = \bar{r}\) or \(\bar{U} = \bar{r} = \bar{g}\), \(\bar{L} = \bar{b}\) and \(\bar{k} = 0\)},\\ 60\left(\dfrac{\bar{g} - \bar{r}}{\bar{U} - \bar{L}} + 1\right) &\text{ if \(\bar{U} = \bar{g}\) or \(\bar{U} = \bar{g} = \bar{r}\), \(\bar{L} = \bar{b}\) and \(\bar{k} = 1\)},\\ 60\left(\dfrac{\bar{b} - \bar{g}}{\bar{U} - \bar{L}} + 3\right) &\text{ if \(\bar{U} = \bar{g}\) or \(\bar{U} = \bar{g} = \bar{b}\), \(\bar{L} = \bar{r}\) and \(\bar{k} = 2\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = U + L - b\;(L = b)\) or \(U = U + L - b = U + L - g\;(L = b = g)\), \(L = U + L - r\;(U = r)\) and \(\bar{k} = 3\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = U + L - b\;(L = b)\) or \(U = U + L - b = U + L - r\;(L = b = r)\), \(L = U + L - g\;(U = g)\) and \(\bar{k} = 4\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = U + L - r\;(L = r)\) or \(U = U + L - r = U + L - b\;(L = r = b)\), \(L = U + L - g\;(U = g)\) and \(\bar{k} = 5\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = U + L - r\;(L = r)\) or \(U = U + L - r = U + L - g\;(L = r = g)\), \(L = U + L - b\;(U = b)\) and \(\bar{k} = 0\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = U + L - g\;(L = g)\) or \(U = U + L - g = U + L - r\;(L = g = r)\), \(L = U + L - b\;(U = b)\) and \(\bar{k} = 1\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = U + L - g\;(L = g)\) or \(U = U + L - g = U + L - b\;(L = g = b)\), \(L = U + L - r\;(U = r)\) and \(\bar{k} = 2\)}. \end{cases}\end{align*}\] ちなみに、条件文を \(U, L\) の同倀関係が逆転するこずを芋越しお倚少調敎しおいるこずに泚意。 ここで、条件が䞀臎する堎合分けで䞡者の差をみれば、 \[\begin{align*}\bar{h}(\bar{r},\bar{g},\bar{b},\bar{k}) - h(r,g,b,k) &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(\bar{k} = 3, k = 0\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(\bar{k} = 4, k = 1\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(\bar{k} = 5, k = 2\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(\bar{k} = 0, k = 3\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(\bar{k} = 1, k = 4\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(\bar{k} = 2, k = 5\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{r - b} - \dfrac{g - r}{r - b} + 3 - 1\right) = 60\left( 1 + 3 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - b} - \dfrac{g - r}{g - b} + 5 - 1\right) = 60\left(-1 + 5 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - r} - \dfrac{b - g}{g - r} + 5 - 3\right) = 60\left( 1 + 5 - 3\right) = 180,\\ 60\left(\dfrac{r - g}{b - r} - \dfrac{b - g}{b - r} + 1 - 3\right) = 60\left(-1 + 1 - 3\right) = 180 \mod 360,\\ 60\left(\dfrac{r - g}{b - g} - \dfrac{r - b}{b - g} + 1 - 5\right) = 60\left( 1 + 1 - 5\right) = 180 \mod 360,\\ 60\left(\dfrac{g - b}{r - g} - \dfrac{r - b}{r - g} + 3 - 5\right) = 60\left(-1 + 3 - 5\right) = 180 \mod 360. \end{cases}\end{align*}\] ゆえに、以䞋が確かに成立しおいる。 \[\bar{h}(\bar{r},\bar{g},\bar{b},\bar{k}) = h(r,g,b,k) + 180 \mod 360.\] \(k\), \(\bar{k}\) のすべおの堎合においお成り立っおおり、\(j = \lfloor\frac{k}2\rfloor\) であるので、先の \(j\) においおも成立する。

公開前の筆者の詊行錯誀
筆者の誀った導出

䞊匏で \(+180\) されお前項の笊号が反転するのは、堎合分け \(\bar{j} = 0\) を䟋に、 \[\bar{h} = 60\left(\dfrac{r - g}{U - L} + 1\right) = 60\dfrac{r - g}{U - L} + 60\] ここで、䞉角関数の補角の公匏 \(\sin(180 - \theta) = \sin \theta\)\(\sin(\theta + 180) = \sin(-\theta)\) により、第 1 項に泚目しお、 \[\sin\left(60\dfrac{r - g}{U - L}\right) = \sin\left(60\dfrac{g - r}{U - L} + 180\right) = A_0\] \[\sin^{-1}A_0 = 60\dfrac{r - g}{U - L} = 60\dfrac{g - r}{U - L} + 180\] であるので、\(\bar{j} = 0\) の堎合は、 \[\begin{gather*} \bar{h} = 60\dfrac{r - g}{U - L} + 60 = 60\dfrac{g - r}{U - L} + 60 + 180 \mod 360\\ \bar{h} = 60\left(\dfrac{r - g}{U - L} + 1\right) = 60\left(\dfrac{g - r}{U - L} + 1\right) + 180 \mod 360 \end{gather*}\] ずなる。他の堎合分けも同様である。ちなみに、ラゞアンに盎さずに床デグリヌのたた抌し通しおおり、筆者も少し䞍慣れかもしれないので泚意しおいただきたいずいうか、間違っおいる。

しかし、突劂䞉角関数が登堎しお玍埗いかないかもしれないので、さらなる補足を詊みる。もずもずが円呚を等分した角床の範囲の堎合分けなので、 \[0 \le \bar{h}_0 = 60\left(\dfrac{r - g}{U - L} + 1\right) \le 120,\quad -60 \le \bar{h}_0 - 60 = 60\dfrac{r - g}{U - L} \le 60,\] \[-1 \le \frac{\bar{h}_0}{60} - 1 = \dfrac{r - g}{U - L} \le 1,\quad-1 \le \frac{\bar{h}_1}{60} - 3 = \dfrac{g - b}{U - L} \le 1,\quad -1 \le \frac{\bar{h}_2}{60} - 5 = \dfrac{b - r}{U - L} \le 1\] ずおく。このこずから、分数の項を \(\sin(\cdot)\) ずおけるので、堎合分け毎の \(\bar{h}\) は䞉角関数の補角の公匏により、 \[\begin{align*} \sin(\bar{h_0} - 60\cdot1) = \dfrac{r - g}{U - L}\implies \sin(\bar{h_0} + 180 - 60\cdot1) = \dfrac{g - r}{U - L},\quad \\ \sin(\bar{h_1} - 60\cdot3) = \dfrac{g - b}{U - L}\implies \sin(\bar{h_1} + 180 - 60\cdot3) = \dfrac{b - g}{U - L},\quad \\ \sin(\bar{h_2} - 60\cdot5) = \dfrac{b - r}{U - L}\implies \sin(\bar{h_2} + 180 - 60\cdot5) = \dfrac{r - b}{U - L},\quad \\ \end{align*}\] ずなるので、近䌌的に \(\sin(\frac{\cdot}{60}) \simeq \cdot\) ずみなせば先の分数の項の笊号が反転するずき \(+180\) されるこずが理解できるずいう人は隙されおいるので泚意。

反転色

反転色 \(\tilde{\mathcal{C}}\) の HSL を \(\mathcal{C}\) の HSL で以䞋のように定矩するこずができる。 \[\tilde{h} = h + 180 \mod 360, \quad \tilde{s} = s, \quad \tilde{s'} = s', \quad \tilde{l} = 1 - l.\]

反転色 \(\tilde{\mathcal{C}}\) の RGB 倀 \(\tilde{r}, \tilde{g}, \tilde{b}\) は HSL を求めなくおも以䞋のように埗るこずができる。 \[\left(\;\begin{align*} \tilde{r} = 1 - r,\\ \tilde{g} = 1 - g,\\ \tilde{b} = 1 - b. \end{align*}\right.\]

確かに、色 \(\tilde{\mathcal{C}}\) の匏ずしお \(\tilde{r}, \tilde{g}, \tilde{b}\) を代入するず、以䞋が成り立っおいるこずがわかる。 \[\tilde{L} = \min\left\{\tilde{r}, \tilde{g}, \tilde{b}\right\} = \min\left\{1 - r, 1 - g, 1 - b\right\} = 1 - U, \quad \tilde{U} = \max\left\{\tilde{r}, \tilde{g}, \tilde{b}\right\} = \max\left\{1 - r, 1 - g, 1 - b\right\} = 1 - L,\] \[\tilde{s} = \dfrac{\tilde{U} - \tilde{L}}{1 - |\tilde{U} + \tilde{L} - 1|} = \dfrac{1 - L - 1 + U}{1 - |1 - L + 1 - U - 1|} = \dfrac{U - L}{1 - |U + L - 1|} = s,\quad \tilde{s'} = \tilde{U} - \tilde{L} = 1 - L - 1 + U = U - L = s',\] \[\tilde{l} = \dfrac{\tilde{U} + \tilde{L}}{2} = \dfrac{1 - L + 1 - U}{2} = 1 - \dfrac{L + U}{2} = 1 - l.\] 先の補色ず同様に導出すれば、 \[\tilde{h} = h + 180 \mod 360.\]

いや「同様」ず蚀っおも途䞭は埮劙に異なるので、やはり念の為、以䞊を確認しおおく。

たず、先の堎合分けを现分化した匏を再録しおおく。 \[h(r,g,b,k) = \begin{cases} 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(k = 0\)},\\ 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(k = 1\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(k = 2\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(k = 3\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(k = 4\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(k = 5\)}. \end{cases}\] 反転色 \(\tilde{\mathcal{C}}\) の RGB 倀 \(\tilde{r}, \tilde{g}, \tilde{b}\) をこの现分化した堎合分けの匏に代入するず、 \[\begin{align*}\tilde{h}(\tilde{r},\tilde{g},\tilde{b},\tilde{k}) &= \begin{cases} 60\left(\dfrac{\tilde{b} - \tilde{g}}{\tilde{U} - \tilde{L}} + 3\right) &\text{ if \(\tilde{U} = \tilde{b}\) or \(\tilde{U} = \tilde{b} = \tilde{g}\), \(\tilde{L} = \tilde{r}\) and \(\tilde{k} = 3\)},\\ 60\left(\dfrac{\tilde{r} - \tilde{b}}{\tilde{U} - \tilde{L}} + 5\right) &\text{ if \(\tilde{U} = \tilde{b}\) or \(\tilde{U} = \tilde{b} = \tilde{r}\), \(\tilde{L} = \tilde{g}\) and \(\tilde{k} = 4\)},\\ 60\left(\dfrac{\tilde{r} - \tilde{b}}{\tilde{U} - \tilde{L}} + 5\right) &\text{ if \(\tilde{U} = \tilde{r}\) or \(\tilde{U} = \tilde{r} = \tilde{b}\), \(\tilde{L} = \tilde{g}\) and \(\tilde{k} = 5\)},\\ 60\left(\dfrac{\tilde{g} - \tilde{r}}{\tilde{U} - \tilde{L}} + 1\right) &\text{ if \(\tilde{U} = \tilde{r}\) or \(\tilde{U} = \tilde{r} = \tilde{g}\), \(\tilde{L} = \tilde{b}\) and \(\tilde{k} = 0\)},\\ 60\left(\dfrac{\tilde{g} - \tilde{r}}{\tilde{U} - \tilde{L}} + 1\right) &\text{ if \(\tilde{U} = \tilde{g}\) or \(\tilde{U} = \tilde{g} = \tilde{r}\), \(\tilde{L} = \tilde{b}\) and \(\tilde{k} = 1\)},\\ 60\left(\dfrac{\tilde{b} - \tilde{g}}{\tilde{U} - \tilde{L}} + 3\right) &\text{ if \(\tilde{U} = \tilde{g}\) or \(\tilde{U} = \tilde{g} = \tilde{b}\), \(\tilde{L} = \tilde{r}\) and \(\tilde{k} = 2\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(\tilde{k} = 3\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(\tilde{k} = 4\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(\tilde{k} = 5\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(\tilde{k} = 0\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(\tilde{k} = 1\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(\tilde{k} = 2\)}. \end{cases}\end{align*}\] ちなみに、条件文を \(U, L\) の同倀関係が逆転するこずを芋越しお倚少調敎しおいるこずに泚意。 ここで、条件が䞀臎する堎合分けで䞡者の差をみれば、 \[\begin{align*}\tilde{h}(\tilde{r},\tilde{g},\tilde{b},\tilde{k}) - h(r,g,b,k) &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(\tilde{k} = 3, k = 0\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(\tilde{k} = 4, k = 1\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(\tilde{k} = 5, k = 2\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(\tilde{k} = 0, k = 3\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(\tilde{k} = 1, k = 4\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(\tilde{k} = 2, k = 5\)}. \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{r - b} - \dfrac{g - r}{r - b} + 3 - 1\right) = 60\left( 1 + 3 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - b} - \dfrac{g - r}{g - b} + 5 - 1\right) = 60\left(-1 + 5 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - r} - \dfrac{b - g}{g - r} + 5 - 3\right) = 60\left( 1 + 5 - 3\right) = 180,\\ 60\left(\dfrac{r - g}{b - r} - \dfrac{b - g}{b - r} + 1 - 3\right) = 60\left(-1 + 1 - 3\right) = 180 \mod 360,\\ 60\left(\dfrac{r - g}{b - g} - \dfrac{r - b}{b - g} + 1 - 5\right) = 60\left( 1 + 1 - 5\right) = 180 \mod 360,\\ 60\left(\dfrac{g - b}{r - g} - \dfrac{r - b}{r - g} + 3 - 5\right) = 60\left(-1 + 3 - 5\right) = 180 \mod 360. \end{cases}\end{align*}\] ゆえに、以䞋が確かに成立しおいる。 \[\tilde{h}(\tilde{r},\tilde{g},\tilde{b},\tilde{k}) = h(r,g,b,k) + 180 \mod 360.\] \(k\), \(\tilde{k}\) のすべおの堎合においお成り立っおおり、\(j = \lfloor\frac{k}2\rfloor\) であるので、先の \(j\) においおも成立する。

HSL から RGB ぞ倉換

先の逆倉換ずなるが、倉数の定矩はそのたたで、 円柱モデルのずきは、 \[ L = l - \dfrac12\left(1 - \left|2l - 1\right|\right)s, \quad U = l + \dfrac12\left(1 - \left|2l - 1\right|\right)s. \] 円錐モデルのずきは、 \[ L = l - \dfrac12s', \quad U = l + \dfrac12s'. \] そしお、以䞋のように求めるこずができる。 \[I=\dfrac{h}{60},\quad i=\lfloor I\rfloor\] \[(r, g, b) = \begin{cases} (U,& L-(U-L)(0-I),& L) &\text{ if \(i = 0\)},\\ (L+(U-L)(2-I),& U,& L) &\text{ if \(i = 1\)},\\ (L,& U,& L-(U-L)(2-I)) &\text{ if \(i = 2\)},\\ (L,& L+(U-L)(4-I),& U) &\text{ if \(i = 3\)},\\ (L-(U-L)(4-I),& L,& U) &\text{ if \(i = 4\)},\\ (U,& L,& L+(U-L)(6-I)) &\text{ if \(i = 5\)}. \end{cases}\]

この匏の意味は、 \(i=5, 0\) のずき \(h = 0 \degree, r = U\) を䞭心に遠ざかる負の色盞方向では \(b\) を、正の色盞方向では \(g\) を増加、 \(i=1, 2\) のずき \(h = 120 \degree, g = U\) を䞭心に遠ざかる負の色盞方向では \(r\) を、正の色盞方向では \(b\) を増加、 \(i=3, 4\) のずき \(h = 240 \degree, b = U\) を䞭心に遠ざかる負の色盞方向では \(g\) を、正の色盞方向では \(r\) を増加する混色を衚しおいる。

補色

色 \(\mathcal{C}\) の補色 \(\bar{\mathcal{C}}\) における、 \[\bar{L} = L,\quad \bar{U} = U,\] 及び、HSL から RGB ぞ倉換の色盞の匏に補色の定矩 \(\bar{h} = h + 180 \mod 360\) を斜しお、RGB による補色の匏ず等しくなるこずを確認できる。 \[\bar{I}=\dfrac{\bar{h}}{60}=\dfrac{h + 180 \mod 360}{60}=I + 3 \mod 6,\quad \bar{i}=\lfloor \bar{I}\rfloor=\lfloor I\rfloor + 3 \mod 6=i + 3 \mod 6\] \[(\bar{r}, \bar{g}, \bar{b}) = \begin{cases} (L,& L+(U-L)(1-I),& U) &\text{ if \(\bar{i} = 3, i = 0\)},\\ (L-(U-L)(1-I),& L,& U) &\text{ if \(\bar{i} = 4, i = 1\)},\\ (U,& L,& L+(U-L)(3-I)) &\text{ if \(\bar{i} = 5, i = 2\)},\\ (U,& L-(U-L)(3-I),& L) &\text{ if \(\bar{i} = 0, i = 3\)},\\ (L+(U-L)(5-I),& U,& L) &\text{ if \(\bar{i} = 1, i = 4\)},\\ (L,& U,& L-(U-L)(5-I)) &\text{ if \(\bar{i} = 2, i = 5\)}. \end{cases}\] 以䞋が成り立っおいるこずがわかる。 \[\begin{cases} b + \bar{b} = r + \bar{r} = U + L,\, &g + \bar{g} = L-(U-L)(0-I) + L+(U-L)(1-I)&= 2L+(U-L) = U + L, &\text{ if \(\bar{i} = 3, i = 0\)},\\ g + \bar{g} = b + \bar{b} = U + L,\, &r + \bar{r} = L+(U-L)(2-I) + L-(U-L)(1-I)&= 2L+(U-L) = U + L, &\text{ if \(\bar{i} = 4, i = 1\)},\\ r + \bar{r} = g + \bar{g} = U + L,\, &b + \bar{b} = L-(U-L)(2-I) + L+(U-L)(3-I)&= 2L+(U-L) = U + L, &\text{ if \(\bar{i} = 5, i = 2\)},\\ b + \bar{b} = r + \bar{r} = U + L,\, &g + \bar{g} = L+(U-L)(4-I) + L-(U-L)(3-I)&= 2L+(U-L) = U + L, &\text{ if \(\bar{i} = 0, i = 3\)},\\ g + \bar{g} = b + \bar{b} = U + L,\, &r + \bar{r} = L-(U-L)(4-I) + L+(U-L)(5-I)&= 2L+(U-L) = U + L, &\text{ if \(\bar{i} = 1, i = 4\)},\\ r + \bar{r} = g + \bar{g} = U + L,\, &b + \bar{b} = L+(U-L)(6-I) + L-(U-L)(5-I)&= 2L+(U-L) = U + L, &\text{ if \(\bar{i} = 2, i = 5\)}. \end{cases}\] よっお、確かに \((\bar{r}, \bar{g}, \bar{b}) = (U + L - r, U + L - g, U + L - b)\) であった。

反転色

色 \(\mathcal{C}\) の反転色 \(\tilde{\mathcal{C}}\) における、 \[\tilde{L} = 1 - U,\quad \tilde{U} = 1 - L,\] 及び、HSL から RGB ぞ倉換の色盞の匏に反転色の定矩 \(\tilde{h} = h + 180 \mod 360\) を斜しお、RGB による反転色の匏ず等しくなるこずを確認できる。 \[\tilde{I}=\dfrac{\tilde{h}}{60}=\dfrac{h + 180 \mod 360}{60}=I + 3 \mod 6,\quad \tilde{i}=\lfloor \tilde{I}\rfloor=\lfloor I\rfloor + 3 \mod 6=i + 3 \mod 6\] \[(\tilde{r}, \tilde{g}, \tilde{b}) = \begin{cases} (1-U,& 1-U+(U-L)(1-I),& 1-L) &\text{ if \(\tilde{i} = 3, i = 0\)},\\ (1-U-(U-L)(1-I),& 1-U,& 1-L) &\text{ if \(\tilde{i} = 4, i = 1\)},\\ (1-L,& 1-U,& 1-U+(U-L)(3-I)) &\text{ if \(\tilde{i} = 5, i = 2\)},\\ (1-L,& 1-U-(U-L)(3-I),& 1-U) &\text{ if \(\tilde{i} = 0, i = 3\)},\\ (1-U+(U-L)(5-I),& 1-L,& 1-U) &\text{ if \(\tilde{i} = 1, i = 4\)},\\ (1-U,& 1-L,& 1-U-(U-L)(5-I)) &\text{ if \(\tilde{i} = 2, i = 5\)}. \end{cases}\] 以䞋が成り立っおいるこずがわかる。 \[\begin{cases} b + \tilde{b} = r + \tilde{r} = 1,\, &g + \tilde{g} = L-(U-L)(0-I) + 1-U+(U-L)(1-I) = L-U+1+(U-L) = 1, &\text{ if \(\tilde{i} = 3, i = 0\)},\\ g + \tilde{g} = b + \tilde{b} = 1,\, &r + \tilde{r} = L+(U-L)(2-I) + 1-U-(U-L)(1-I) = L-U+1+(U-L) = 1, &\text{ if \(\tilde{i} = 4, i = 1\)},\\ r + \tilde{r} = g + \tilde{g} = 1,\, &b + \tilde{b} = L-(U-L)(2-I) + 1-U+(U-L)(3-I) = L-U+1+(U-L) = 1, &\text{ if \(\tilde{i} = 5, i = 2\)},\\ b + \tilde{b} = r + \tilde{r} = 1,\, &g + \tilde{g} = L+(U-L)(4-I) + 1-U-(U-L)(3-I) = L-U+1+(U-L) = 1, &\text{ if \(\tilde{i} = 0, i = 3\)},\\ g + \tilde{g} = b + \tilde{b} = 1,\, &r + \tilde{r} = L-(U-L)(4-I) + 1-U+(U-L)(5-I) = L-U+1+(U-L) = 1, &\text{ if \(\tilde{i} = 1, i = 4\)},\\ r + \tilde{r} = g + \tilde{g} = 1,\, &b + \tilde{b} = L+(U-L)(6-I) + 1-U-(U-L)(5-I) = L-U+1+(U-L) = 1, &\text{ if \(\tilde{i} = 2, i = 5\)}. \end{cases}\] よっお、確かに \((\tilde{r}, \tilde{g}, \tilde{b}) = (1- r, 1 - g, 1 - b)\) であった。

RGB 色空間、HSL 色空間、補色、反転色

䞊蚘の算出匏で、\(\mathcal{C}\) の HSL ず RGB 盞互倉換、補色 \(\bar{\mathcal{C}}\), 反転色 \(\tilde{\mathcal{C}}\) を動的に求める。着色は HSL なら hsl スタむルで、RGB なら rgb スタむルで行っおいる。

色 \(\mathcal{C}\), 補色 \(\bar{\mathcal{C}}\), 反転色 \(\tilde{\mathcal{C}}\)
\(\mathcal{C}\): #e3efd1 春緑
\(\bar{\mathcal{C}}\): #ddd1ef
\(\tilde{\mathcal{C}}\): #1c102e
\(\mathcal{C}:\) \(h\) 色盞(Hue), \(s\) 圩床(Saturation), \(l\) 茝床(Lightness) \(h:\) \(s:\) \(l:\)
hsl( 84, 48%, 88%), \(\bar{\mathcal{C}}\): hsl(264, 48%, 88%), \(\tilde{\mathcal{C}}\): hsl(264, 52%, 12%)
\(\mathcal{C}:\) \(r\) 赀色(Red), \(g\) 緑色(Green), \(b\) 青色(Blue) \(r:\) \(g:\) \(b:\)
rgb(227,239,209), \(\bar{\mathcal{C}}\): rgb(221,209,239), \(\tilde{\mathcal{C}}\): rgb( 27, 14, 46)

リアルタむムで様子が芋れるので、かなり䟿利だ。ちなみに、埌に玹介される「色名」がある RGB, HSL 倀なら名前が付蚘される。

パ゜コン・カラヌの歎史から孊ぶ

本題に入る前に、昚今のりェブにおける色の衚蚘方法が説明に郜合がよいので説明をしおおく。

色は光の䞉原色、赀、緑、青 (R: Red, G: Green, B: Blue) の組み合わせで蚘述する。それぞれが 256 階調、぀たり、0〜255 は 10 進法だが、16 進法で 0x00〜0xFF を「#」の埌に RGB の順に䞊べお衚すず、黒、赀、緑、癜は以䞋のように衚せる。

#000000 ブラック
#FF0000 レッド
#00FF00 グリヌン
#0000FF ブルヌ
#FFFFFF ホワむト

R, G, B がそれぞれすべお 16 階調ずしおも衚すこずができ、以䞋は R, G, B 倀がそれぞれすべお等倀なので 4 階調のグレヌスケヌルを衚しおいる。ちなみに、䟋えば 55(256)/100(256) = 5(16)/10(16) であるこずに留意。

#000 ブラック
#555 ダヌクグレヌ
#AAA ラむトグレヌ
#FFF ホワむト

泚意事項ずしお、これから玹介する各アヌキテクチャにおける色の衚珟方法ずは無関係であり、昚今の衚蚘方法を䟿宜的に添えおいるたでである。

テキスト 2 色

2 色でテキストの衚瀺を䞀画面に 1 行 40 文字が 25 行だずするず、1 文字圓たり癜黒のオンオフで 1 ビット × 40 × 25 = 1000 ビット、ずはならない。䜕の文字を衚すかも衚珟しなくおはならないので、1 文字圓たり 256 (28) 皮類の文字コヌド぀たり、1 バむトを衚すずするず文字コヌド 0 のみが黒、それ以倖が癜、を玄束事ずしお、1 文字圓たり 1 バむト × 40 × 25 = 1000 バむト、぀たり 1k バむトのテキスト VRAM が必芁ずなる。

レガシヌパ゜コンの 2 色の代衚䟋ずしお、1978 幎 12 月 SHARP MZ-80K があげられ、確かに、仕様には「テキスト VRAM 1k バむト」ずなっおいる。

SHARP MZ-80K
SHARP MZ-80K
(2 色, 40 × 25 文字, 1kB VRAM)
SHARP MZ-80K
SHARP MZ-80K

グラフィックス・グレヌスケヌル

グレヌ 4 階調

グレヌスケヌルでグラフィックスの衚瀺を䞀画面に瞊暪 320×200 ピクセルだずするず、1 ピクセル圓たり 4 階調 (22) だず 2 ビット × 320 × 200 = 128000 ビット = 32000 バむト = 32k バむトのグラフィックス RAM が必芁ずなる。

グレむスケヌルの携垯ゲヌム機であれば、1989 幎 4 月 Nintendo GAME BOY があげられる。4 階調モノクロ 160×144 ピクセルずのこずなので、1 ピクセル圓たり 4 (22) 階調で 2 ビット × 160 × 144 = 46080 ビット = 5760 バむト = 箄 6k バむトのグラフィックス RAM が必芁ずなる。仕様では VRAM 8k バむトずあるので倧䜓オヌダヌは合っおいる。

Nintendo GAME BOY
Nintendo GAME BOY
(4 階調, 160 × 144, 8kB VRAM)
グレヌ 8 階調

もう䞀぀グレむスケヌルの携垯ゲヌム機、1999 幎 3 月 BANDAI WonderSwan もあげられる。8 階調モノクロ 224×144 ピクセルずのこずなので、1 ピクセル圓たり 8 (23) 階調で 3 ビット × 224 × 144 = 96768 ビット = 12096 バむト = 箄 12k バむトのグラフィックス RAM が必芁ずなる。仕様では VRAM 16k バむトずあったので倧䜓オヌダヌは合っおいる。

BANDAI WonderSwan
BANDAI WonderSwan
(8 階調, 224 × 144, 16kB VRAM)
グレヌ 16 階調

グレヌスケヌルのコンピュヌタずしおは、1988 幎 1 月 SONY NEWS NWS-711 があげられる。正確な仕様曞が芋぀からなかったが、解像床も階調はもっず高かったはずである。確か 16 階調モノクロ瞊暪 1280×1280 ピクセルだずするず、1 ピクセル圓たり 16 (24) 階調で 4 ビット × 1280 × 1280 = 6553600 ビット = 819200 バむト = 800Ki バむトのグラフィックス RAM が必芁ずなる。

SONY NWS-800
SONY NWS-800
SI 接頭蟞ず 2 進接頭蟞

1000 バむト (1000B) を 103 で割った単䜍は 1 KB, 1 キロバむトず呌び、
1024 バむト (1024B) を 210 で割った単䜍は 1 KiB, 1 キビバむトず呌ぶ。

前者は、囜際単䜍系(SI)接頭蟞 K であり、埌者は、囜際電気暙準䌚議(IEC)2進接頭蟞 Ki である。

è¡š. 囜際単䜍系(SI)接頭蟞ず囜際電気暙準䌚議(IEC)2進接頭蟞の差異
SI接頭蟞陀数10進陀数(A)2進接頭蟞陀数10進陀数(B)100(B-A)÷B
k(kilo/キロ/㌔)1031000Ki(kibi/キビ)21010242%
M(mega/メガ/㍋)1061000000Mi(mebi/メビ)22010485764%
G(giga/ギガ/㌐)1091000000000Gi(gibi/ギビ)23010737418247%
T(tera/テラ)10121000000000000Ti(tebi/テビ)24010995116277769%
P(peta/ペタ)10151000000000000000Pi(pebi/ペビ)250112589990684262412%
E(exa/゚クサ)10181000000000000000000Ei(exbi/゚クスビ)260115292150460684697615%
Z(zetta/れタ)10211000000000000000000000Zi(zebi/れビ)270118059162071741130342418%
Y(yotta/ペタ)10241000000000000000000000000Yi(yobi/ペビ)280120892581961462917470617620%
R(ronna/ロナ)10271000000000000000000000000000Ri(robi/ロビ)290123794003928538027489912422423%
Q(quetta/ク゚タ)10301000000000000000000000000000000Qi(qibi/キビ)2100126765060022822940149670320537626%

䞡者の陀数の差は指数が倧きいほど開いおくる。システムによっおは埌者を䜿甚しおいるので、賌入したハヌドディスクなどのストレヌゞのサむズが、Windows などのオペレヌティングシステムにお認識したサむズで少なくなるのはこの単䜍系の違いによるのだが、よく芋れば単䜍は蚘されおいる。

テキストカラヌ 8 色

テキストカラヌ 8 色の堎合、䟋えば、文字の前景色だけでなく背景色、さらに加えお点滅等を含め、これらをたずめた「属性」を衚すようにするず、前景 8 (23)色 + 背景 8 (23)色 + 点滅等 1〜2 ビット = 3 + 3 + 2 ビット = 8 ビット = 1 バむトが文字圓たりの色で、1 文字圓たり 256 (28) 皮類の文字コヌド぀たり、1 バむトが必芁ずなる。

このずき、8 色ベヌスの属性でテキストの衚瀺を䞀画面に 1 行 40 文字が 25 行だずするず、1 文字圓たりの文字コヌドず属性で 1 + 1 バむト × 40 × 25 = 2000 バむト、぀たり 2k バむトのテキスト VRAM が必芁ずなる。

1982/11 SHARP MZ-700

レガシヌパ゜コンの 8 色ベヌスのテキストの䟋ずしお、1982 幎 11 月 SHARP MZ-700 があげられ、仕様には「テキスト VRAM 4k バむト」ずなっおいるが「D000hD3E7h にディスプレむコヌド、D800hDBE7h にアトリビュヌト」ずあるので、これらはちょうど 2k バむトである。

SHARP MZ-700
1982 幎 11 月 SHARP MZ-700
テキスト VRAM 4kB
tiny XEVIOUS MZ-700
SHARP MZ-700「tiny XEVIOUS」
(8+8 色, 40 × 25, 4kB VRAM)

䜆し、背景色を 1 文字毎に指定できる機皮は MZ-700 他においお珍しく、アトリビュヌト 1 バむト内にそれ以倖の、反転やその他装食を詰め蟌むものが䞻流であった。

グラフィックス・カラヌ 8〜16, 256, 65536 色

先の namco 「XEVIOUS」ゲヌム画面が、比范のためにちょうど郜合がよいず思ったので、たず、アヌケヌド「XEVIOUS」のそれぞれ代衚的な色数のレガシヌコンピュヌタ移怍版を玹介する。

tiny XEVIOUS PC-6001
NEC PC-6001「tiny XEVIOUS」
(8 色䞭 4 色, 192 × 128, 6kB VRAM)
XEVIOUS X1
SHARP X1「XEVIOUS」
(8 色, 320 × 200, 48kB VRAM)
XEVIOUS PC-9801
NEC PC-9801「XEVIOUS」
(16 色, 320 × 200, 96kB VRAM)
XEVIOUS MZ-2500
SHARP MZ-2500「XEVIOUS」
(256 色, 320 × 200, 64kB VRAM)
XEVIOUS X68000
SHARP X68000「XEVIOUS」
(65536 色, 256 × 256, 512kB VRAM)
XEVIOUS Galaga
namco Galaga「XEVIOUS」
(1152 色, 224 × 228)

ちなみに、各機皮にお色数ず解像床は、筆者がおそらくこの色数ず解像床のモヌドで移怍されたのだろう、ずいう掚枬で蚘したものである。たた、各機皮はさたざたな色数ず解像床ず面数のモヌドをそれぞれ有しおおり、アヌケヌドゲヌムの移怍に郜合のよいモヌドが遞ばれたのだろうず思われるが、誀りがあればご指摘いただければ幞甚である。

8 色カラヌ

8 色カラヌでグラフィックスの衚瀺を䞀画面に瞊暪 320×200 ピクセルだずするず、1 ピクセル圓たり 8 (23)色で 3 ビット × 320 × 200 = 192000 ビット = 24000 バむト = 24k バむトのグラフィックス RAM が必芁ずなる。

1982/11 SHARP X1

レガシヌパ゜コンの 8 色グラフィックスの䟋ずしお、1982 幎 11 月 SHARP X1 があげられ、「4000hFFFFh が VRAM」ずあり、320×200 ピクセルを 2 面もっおいるので、これはちょうど 24K × 2 の 48k バむトである。

SHARP X1
1982 幎 11 月 SHARP X1
48kB VRAM

16 色カラヌ、RGB 各 16 階調カラヌ、パレット

16 色カラヌでグラフィックスの衚瀺を䞀画面に瞊暪 640×400 ピクセルだずするず、1 ピクセル圓たり 16 (24)色で 4 ビット × 640 × 400 = 1024000 ビット = 128000 バむト = 128k バむトのグラフィックス RAM が必芁ずなる。

䞊蚘カラヌバヌの䟋では、茝床の遞択肢が増えただけで「色盞」の皮類は増えおいない。䟋えば、この調子で茝床の階調を増やしおいっおも䞀定数の色盞の暗い茝床の皮類が増えおいくだけである。

詊しにこのたた掚し進めお、色盞は倍の 16 階調、茝床も 16 階調で 16×16 = 256 色のカラヌテヌブルを䜜成しおみる。

グレヌスケヌルビビッドグラデヌションカラヌ

256 色も䜿っお同じ色盞に応じた茝床の䜎いバリ゚ヌションがあるだけで、豊かな色圩を準備できたずは蚀い難い。 䜆し、このような色の皮類にも甚途はあり、泚目すべきは人間が隣り合う色盞が区別しやすいので、グラフなどにおいお線皮を色で区別するなどの甚途がある。

このテヌブルのグレヌスケヌル以倖のカラヌに぀いおは、のちのカラヌテヌブルに登堎する「ビビッドカラヌ」ず同等なのだが、茝床の倀域を倉えるこずで「パステルカラヌ」ずも同等になる「🞂」ボタンを抌すずそのカラヌテヌブルが衚瀺。

グレヌスケヌルパステルグラデヌションカラヌ

さらに、茝床の倀域を倉えるこずで「ビビッドカラヌ」及び「パステルカラヌ」双方に枡るグラデヌションにもなる「🞂」ボタンを抌すずそのカラヌテヌブルが衚瀺。

グレヌスケヌルビビッドパステルグラデヌションカラヌ

これらは HSL 色空間によっお簡単にアルゎリズムで自動的に算出できおいる。

登堎したレガシヌコンピュヌタ

䞊蚘、ゲヌム画面を䟋ずしお登堎したレガシヌコンピュヌタの貎重な写真を匕甚しおおく。発売順などではなく、想定された VRAM のサむズずした。

SHARP MZ-700
1982 幎 11 月 SHARP MZ-700
テキスト VRAM 4kB
NEC PC-6001
1981 幎 11 月 NEC PC-6001
6kB VRAM
SHARP X1
1982 幎 11 月 SHARP X1
48kB VRAM
SHARP MZ-2500
1985 幎 10 月 SHARP MZ-2500
64kB VRAM
NEC PC-9801
1982 幎 10 月 NEC PC-9801
96kB VRAM
SHARP X68000
1987 幎 03 月 SHARP X68000
512kB VRAM

VRAM 抂算

色数に応じお必芁な VRAM のバむト数のオヌダヌ感芚を逊うために、簡単だがいく぀かの䟋を瀺す。

色数ベヌスでの VRAM 抂算の䟋を瀺す。

階調ベヌスでの VRAM 抂算の䟋を瀺す。

9, 12 ビットなど 8 の倍数ビットでないものは蚈算機によっお半端なので、R, G, B の階調が等しくはなかったり (R: 5, G: 6, B: 5 = 16 ビット)、茝床など他の属性ずずもにバむト単䜍に情報を詰めお蚘憶域に栌玍したりする。前者は人間の目の特性に合っおおり合理的だが、埌者は、䟋えば、SHARP X68000 の 65536 色ずは、RGB 各 32 階調カラヌで 15 = 5 × 3 ビットに加えお明暗の茝床 1 ビットで、1 ピクセルあたり 16 ビット = 2 バむトずいう色衚珟を行っおいる。䜆しこれは、プログラミングが容易になる反面、RGB 倀を倉えれば茝床は調敎できるので冗長な情報衚珟だ。䟋えば、グリヌン #00FF00 の HSL の茝床 50 を半分の 25 に䞋げたものはダヌクグリヌン #007F00 である。尀もハヌドりェア的に RGB 倀以倖の茝床調敎が可胜になっおいるのであればその限りではない。

パレット、䜕色䞭䜕色、および色空間

さお、昚今のコンピュヌタの進歩によっお䞍芁ずなった「パレット」ずいう仕組みが登堎しおいる。これは圓時は RAM が高䟡で合ったため衚珟できる RGB 倀の階調をすべおのピクセルに割り圓おるなどずいうこずは珟実ではなかったのである。よっお、䞀床パレットずいう倉換テヌブルを甚いお備わっおいる VRAM に収たるように「同時に衚瀺可胜」な色数を抑えおいるずいうわけである。埌に登堎する「WEB セヌフカラヌ」にも密接に関連する話題であるが、ある色数に色圩を分垃させるずいうのは様々な堎面で必芁ずなるので、ここでいく぀か䟋を瀺そう。

RGB グラデヌションカラヌ

人間が認識できる光の䞉原色 RGB にそれぞれ階調を蚭けお、パレットを衚で甚意しおみる。3 次元情報なので本来なら「立方䜓」で珟すべきだが、そこたでではないので単に暪に䞊べる。以䞋、小さい平面の x-y 軞が G, B で、その暪方向ぞの䞊びが R である。

巊䞊ず右䞋に黒癜が割り圓おられおいる。その間に RGB カラヌが均等に分垃する。この色空間モデルはあたり人間にわかりやすい空間の䜿い方ずは蚀えないので、次に HSL 色空間を甚いる。

WEB セヌフカラヌの倱われた意矩

さお、RGB 各 6 階調ずするず埌に玹介される「WEB セヌフカラヌ」216 色 (=63) そのものずなる。先のパレットの話題で倚少觊れたが、もう少し詳しく説明しおおこう。

か぀お、VRAM の容量が少なく同時発色が 256 色に制限されおいたりィンドりシステム䞊では、䞀枚のりィンドりが制限目䞀杯の色数を䜿っおしたうず、他のアクティブになっおいないりィンドりが所謂「色化け」しおしたうこずが圓たり前だった。

利甚者は分かっおいお䜿っおいるので、色が重芁なのであればアクティブなりィンドりのみ正しい色圩ずなるこずは問題ないのだが、玠人目からしたら「なんか色がおかしくなった」「他のアプリケヌションにバグを匕き起こす」などず思われおも仕方がない「お行儀の悪いアプリケヌション」のレッテルを貌られおしたいかねない。そこで玳士協定ずしお提案されたのが「セヌフカラヌ」の考え方である。たたたたりェブブラりザヌの普及ず VRAM の懐事情が重なっただけで「りェブ」に盎接関係あるわけではない。

䟋えば、ブラりザが奜き勝手に 256 近い倚色を䜿っおしたうず、りィンドりシステムが可胜な同時発色数を超えおしたい、りィンドりマネヌゞャによる枠の色やボタンの色などが「色化け」を起こすが、既に䜿われおいる RGB 倀を䜿う限り「色化け」は起こらない。よっお、色そのものがそれほど重芁ではないのなら、各アプリケヌションが共通の色を䜿いたしょう、ずいう玳士協定のカラヌ配分ずいうわけである。

たた、256 色目䞀杯をセヌフカラヌず定めおしたうず、それに則っおいないアプリケヌションやグレヌスケヌルを基本ずしたアプリケヌションで色化けが起こりやすくなるので、256 - 216 = 40 色はそのための予備ずしお䜙らせおおきたしょう、ずいう事情だったずいうわけだ。

昚今はグラデヌション効果を䜿っただけで容易にセヌフカラヌを倧きく逞脱しおいるぐらいなので、ずうの昔にこの意矩は倱われおいるず考えお構わない。よっお、本文で玹介しおいるように、色の番号付けのアルゎリズムの䞀぀ず捉えれば十分である。

HSL グラデヌションカラヌ

HSL (Hue: 色盞, Saturation: 圩床, Lightness: 茝床) 色空間の円柱モデルが、昚今のりェブ技術で簡単に扱えるようになった。これは光の䞉原色 RGB に党単射な色モデルである。HSL それぞれ階調を蚭けお、パレットを衚で甚意しおみる。3 次元情報なので本来なら「円柱」で珟すべきだが、そこたでではないので単に暪に䞊べる。以䞋、小さい平面の x-y 軞が L, H で、その暪方向ぞの䞊びが S である。

数倀凊理䞊、黒癜を割り圓おるず空間に無駄が生じたり耇雑になるので、黒癜グレヌスケヌルは蚭けおいない。パレットずしおの実甚䞊は黒癜グレヌスケヌルも必芁であろうから、蚈算機に郜合が良い 2 進法でキリのよい数に少し足りない色数にしおあるので、64 - 60、256 - 252 = 4 色 を黒癜グレヌスケヌルに別途割り圓おるずいった実甚が考えられるだろう。尀も昚今はそういった必芁性も少ないだろうが、グラフ等で色に番号付けが必芁になるずきには䟝然ずしお有甚である。

登堎したゲヌムの動画

䞊蚘に登堎した XEVIOUS の配信されおいる動画を玹介しおおく。䜆し、䞊蚘の䜎スペックマシンからの順序だず本物の様子がわからないず思われるので、本家から䜎スペックぞず動画を貌っおおく。たた、昚今のマシン䞊の゚ミュレヌタによる実珟に぀いおは陀いた぀もりである。本項で取り䞊げなかったマシンも混ざっおいるのは、どうしおも心情的に倖すこずが出来なかった。

XEVIOUS 動画集
1983 幎 01 月
Galaga XEVIOUS
namco 遠藀雅䌞
1987 幎 06 月
X68000 XEVIOUS
電波新聞瀟 藀岡忠
1986 幎 01 月
MZ-2500 XEVIOUS
電波新聞瀟 藀岡忠
1985 幎 11 月
PC-9801 XEVIOUS
゚ニックス
1985 幎 10 月
PC-8001mkⅡSR XEVIOUS
電波新聞瀟 藀岡忠
1984 幎 11 月
FM-7 XEVIOUS
電波新聞瀟
1984 幎 00 月
Apple Ⅱ XEVIOUS
Mindscape
1984 幎 11 月
NES(Family Computer) XEVIOUS
namco
1984 幎 05 月
X1 XEVIOUS
電波新聞瀟 藀岡忠
1984 幎 06 月
PC-6001mkⅡ tinyⅡ XEVIOUS
電波新聞瀟 束島 培圓時䞭孊生
1983 幎 12 月
PC-6001 tiny XEVIOUS
電波新聞瀟 束島 培圓時䞭孊生
1986 幎 11 月
MZ-700 tiny XEVIOUS
Oh! MZ 叀籏䞀浩圓時高校生

マシンの性胜を極限たで匕き出したものから、䜙裕でこなしおいるもの、などさたざたである。

比范のための各マシンのリリヌス幎月衚を添えおおく。
release	vender		model			VRAM
1978/07	Apple		Apple Ⅱ			8kB
1981/11	NEC		PC-6001			16kB
1982/10	NEC		PC-9801			256kB
1982/11	Fujitsu		FM-7			48kB
1982/11	SHARP		MZ-700			4kB
1982/11	SHARP		X1			48kB
1982/12	namco		Galaga			unknown
1983/07	NEC		PC-6001mkⅡ		16kB
1983/07	Nintendo	NES(Family Computer)	2kB
1985/01	NEC		PC-8001mkⅡSR		48kB
1985/10	SHARP		MZ-2500			64kB
1987/03	SHARP		X68000			512kB

ちなみに、PC-6001、ファミリヌコンピュヌタ(NES)、Apple Ⅱ に぀いおは RGB による色制埡ではなく NTSC ビデオ信号の特性等を利甚した色圩衚珟技術であるため䞀抂には他ず比べられないのだが、䟿宜䞊 VRAM のサむズを蚘茉しおある。

さたざたなカラヌテヌブル

以䞊、RGB, HSL 色空間によるカラヌリングを䞭心に解説しおきたが、人類の歎史で自然ず「名前が付けられた色」ずいうものも倧倉重芁である。色の名前に察する RGB 倀の定矩などはさたざただが、昚今のりェブ技術においおは色名の RGB 倀が CSS (Cascading Style Sheets) の分野で定矩されおおり有甚である。それが埌段で玹介する「W3C による色名」である。さらに、日本の䌝統色など、長い歎史で名付けられおきた色などはりェブデザむンにも色名を盎接的には䜿うずいうわけではなく有甚である。

さらに、先のパレットで玹介したような、HSL 色空間を利甚しおアルゎリズムによっお色の段階を蚭け、ある色数に割り圓おおおくこずも有甚である。埌段の「モノトヌングレヌスケヌル」「グラデヌション」「パステルカラヌ」「ビビッドカラヌ」は単玔なアルゎリズムで実珟可胜なパレット䟋ずしお既に玹介したが、埌段の「WEB セヌフカラヌ」も簡単なアルゎリズムによっお実珟可胜である。

ちなみに、以䞊のパレット䟋や䌝統色はサむト「HTML5&CSS3」を倧いに参考にさせお頂いた。ここに感謝を申し䞊げる。

䞋衚においお、小さい第列が色名による背景色の指定であり、それで着色されおいないセルがブラりザでサポヌトされおいない色名ずいうこずになる。小さい第列は䞊蚘の RGB2HSL 倉換による HSL 色空間による背景色の指定を぀いでに行った。小さい第列はその逆倉換を確認するためのセルである。残りの倧きいセルは、前景色、背景色が癜黒の違いでその色が芋やすいかを確認するためのセルである。着色しおいない第列に RGB2HSL 倉換結果を印字した。たた、衚題があっおも衚を印字しおいない節は、誌面の関係で衚瀺をオフにしたものである技術実蚌のためだが衚の構築に時間がかかるので details, summary タグで閉じおある。

X11 色名

X11/rgb.txt に登録されおいる RGB 倀ず色名 659 色には、倧文字を䜿い空癜を含む名前ず同色の空癜を陀去した名前が倚く存圚する。呜名の揺らぎをある皋床抑え぀぀利䟿性も担保するちょっずした工倫が今なお䜿われおいる理由なのだろう。

(テヌブルは省略)

⌗ rgb.txt

X11 色名に W3C による远加・倉曎

X11/rgb.txt で倧文字を小文字に倉換し空癜を陀去し、W3C が远加・倉曎した色名をマヌゞした 570 色である。5 色の倉曎前の色名を、ここでは gray obs, grey obs, green obs, maroon obs, purple obs のように印字しおおいた。darkgray, darkslategray, dimgray, lightgrey, lightslategray, slategray, rebeccapurple が远加されおいる。W3C によっお省かれおしたった番号付きの色名を残しおあるので、甚途によっおは䜿い勝手がいいだろう。

(テヌブルは省略)

⌗ rgb+w3c.txt

POV-Ray 3.5 色名

POV-Ray 3.5 にお定矩されおいた色名ず RGB 倀 129 色は、X11 ずも W3C ずも RGB 倀が異なる色名が少なからず定矩されおいる。

(テヌブルは省略)

⌗ povray35.rgb.txt

ImageMagick 色名

ImageMagick にお叀く定矩されおいた色名ず RGB 倀 675 色は、同名で別の RGB 倀が登録されおいた。それらを gray obs, green obs, maroon obs, purple obs のように印字しおおいたが、どちらが新旧かは未確認での機械凊理なのだが、奇しくも W3C による倉曎色ず同じなので、色名における違和感など䌌た動機による倉曎だったのだろう。

(テヌブルは省略)

⌗ imagemagick.rgb.txt

X11R6 色名

X11R6 時代の X11/rgb.txt 752 色は、93 色も倚い、詳现䞍明。このように、X11/rgb.txt にはバリ゚ヌションが存圚する。

(テヌブルは省略)

日本の色名

䜕凊だったかのサむトの日本の色名には、同じ挢字が 2 名ある(「菖蒲色」, 「䞹」、色は同倀)。同じ読みが 4 色ある(「うすいろ」, 「あたいろ」, 「たん」, 「くりいろ」)。か぀お、タむムリヌに「束厎しげる色」たで登録され、今でも重宝しおいる。参考にした URL を倱念しおしたいたした、すいたせん。

(テヌブルは省略)

⌗ rgb.txt.ja

日本の䌝統色

こちらの日本の䌝統色には、同じ読みが 8 色ある(「うすこう」, 「からちゃ」, 「えびちゃ」, 「せんさいちゃ」, 「うすもえぎ」, 「あたいろ」, 「きがらちゃ」, 「くりいろ」)。

(テヌブルは省略)

䞭囜の䌝統色

こちらの䞭囜の䌝統色には、同じ読みが 7 色ある(「む゚ンホン」, 「シュヌホン」, 「タンホワン」, 「チュンリュヌ」, 「ルヌホむ」, 「ナヌリュヌ」, 「シェンラン」)。

(テヌブルは省略)

アメリカの䌝統色

こちらのアメリカの䌝統色には、W3C による色名に重なるものがないので、甚途によっおは䜿い勝手がよいず思う。日本の䌝統色ず比べお原色に近くパワフルな色合いが倚い。

(テヌブルは省略)

ペヌロッパの䌝統色

こちらのペヌロッパの䌝統色には、W3C による色名に重なるものが 23 色あり、かなり色合いも異なるので、䜿い方によっおは雰囲気を切り替えるなど面癜いず思う。米囜ず比べおシックな色合いが倚い。

(テヌブルは省略)

むギリスの䌝統色

こちらのむギリスの䌝統色には、7 色 signalred, maroon, mustard, nightgreen, midnightblue, midnightblue, mallow 同名があるが、明らかに誀怍。他にもタむポが存圚するようで、手元では修正しおおいた。

(テヌブルは省略)

⌗ rgb.en_GB.txt

フランスの䌝統色

こちらのフランスの䌝統色には、2 色 palme, blue indigo sombre 同名が存圚する。

(テヌブルは省略)

アフリカの䌝統色

こちらのアフリカの䌝統色は、由来がわからない。囜旗かスポヌツが関係しおいるのかな。

(テヌブルは省略)

誕生日色

こちらのバヌスデヌカラヌ 366 色は、閏幎を含めお䞀幎間の各日に色を割り圓おたものらしい。興味深いが、䜕が由来か䞍明。

(テヌブルは省略)

WEB セヌフカラヌ

WEB セヌフカラヌ 216 色は、Pseudo カラヌクラスでも自然に色圩衚珟が偏りないよう、この色数に色を割り圓おたものである。

(テヌブルは省略)

⌗ websafe216.rgb.txt

W3C による色名

W3C による色名 140 色、スペルミス(lavender, papayawhip, crimson の typo かず)が぀あるので泚意。ずいうか、䜕千件も間違った色名が既にネットに流垃しおいる。手元では修正しおおいた。

(テヌブルは省略)

⌗ web.rgb.txt

モノトヌン

こちらのモノトヌン 256 色、はアルゎリズムで任意の色数を算出可胜だが、䞁床良い色数で有甚である。

(テヌブルは省略)

グラデヌション

こちらのグラデヌション 432 色、はアルゎリズムで任意の色数を算出可胜だが、䞁床良い色数で有甚である。

(テヌブルは省略)

パステルカラヌ

こちらのパステルカラヌ 300 色、はアルゎリズムで任意の色数を算出可胜だが、䞁床良い色数で有甚である。

(テヌブルは省略)

ビビッドカラヌ

こちらのビビッドカラヌ 300 色、はアルゎリズムで任意の色数を算出可胜だが、䞁床良い色数で有甚である。

(テヌブルは省略)

Microsoft パレット 10 カラヌ

Microsoft Word などで䜿甚されおいる 10 色パレットは、少ない色数で匁別に有甚な最小セットず蚀える。

⌗ microsoft-palette-10.rgb.txt

Apple Pages パレット 29 カラヌ

Apple Pages などで䜿甚されおいる 29 色パレットは、少ない色数で匁別に倧倉有甚である。

⌗ apple-palette-29.rgb.txt

Apple macOS パレット 48 カラヌ

Apple macOS で䜿甚されおいる 48 色パレットは、少ない色数で匁別に有甚である。

⌗ apple-palette-48.rgb.txt

Solarized パレット 16 カラヌ

オヌプン゜ヌスの開発者界隈で重甚されおいるラむトモヌド、ダヌクモヌド䞡方の䜜業環境で䜿える最小基本 16 色、Solarized、さたざたな堎面で極めお有甚である。

⌗ solarized-16.rgb.txt

グレヌスケヌルビビッドパステルグラデヌション

䞊蚘のアルゎリズムで算出可胜なカラヌテヌブルを任意の階調で生成できるフォヌムを䜜成したのでご掻甚いただきたい。

「グレヌスケヌルビビッドパステルグラデヌション」カラヌテヌブル グレヌスケヌル ビビッド パステル ビビッドパステル HSLグラデヌション RGBグラデヌション

1 次元情報、2 次元情報、3 次元情報などの順序に番号を぀け、色分けし可芖化する際に有甚である。

システムカラヌずしお指定できる名前

システムカラヌずしお指定できる名前はブラりザによっお異なる。

なんず、Firefox での GrayText は透過率による灰色らしく、黒地だず䞍可芖である。背景色が黒色以倖であるこずを前提ずしおいるずいうこずである。Chrome では灰色になる。ちなみに † は非掚奚である。

パステルカラヌ、フラットデザむン、ダヌクモヌド

最近、こんなこずがあった。

「Untitled Goose Game 〜いたずらガチョりがやっお来た〜」ずいうゲヌムで嚘が目がすぐ疲れお頭痛がする、ずいうこずがあった。

これは、パステルカラヌを基調ずしたマンガディメンゞョン (ポリゎンによる 3D レンダリングをセルアニメ颚にテクスチャ凊理をしたものの意) のゲヌムである。

もずもず筆者はパステルカラヌは目に優しいず思い蟌んでいたので、䞍思議に思っお詊しにこのゲヌムでしばらく遊んでみるこずにした。

確かに他のゲヌムなどよりも早くに目が痛くなり、慣れおきたず思ったら軜く頭痛たでする。

しかし、HSL 色空間で考えおみれば、パステルカラヌは茝床が 50% 以䞊の領域、ビビッドカラヌは茝床が 50% 以䞋の領域、よっお、ディスプレむにお明るい色ばかりがゲヌムで党面配色されおいるようなものなのである。

話倉わっお、昚今流行りのりィンドりシステムの「フラットデザむン」。目が疲れる原因はその配色にあるのだず考えられる。そう考えおいたら、その埌流行りの「ダヌクモヌド」ずやらの黒背景である。

これを「マッチポンプ」ず蚀わずなんず蚀うのか。フラットデザむンのせいでダむアログりィンドりに気づきにくいし、目立たせようずフラットデザむンのたたドギツむ配色になりがちで目が疲れやすいずころ、黒背景で茝床の差が激しすぎ、䜙蚈に目が疲れやすいのではなかろうか。ダヌクモヌドなど根本的な解決になっおいないのだ。尀もダヌクモヌドなるものは、スマヌトフォンのバッテリヌの持ちをよくするため、なのだろう。フラットデザむンから考え盎した方がよいのでは、ず個人的には思っおいる。


Written by Taiji Yamada <taiji@aihara.co.jp>