ANSI 6x6x6カラーキューブ - カラーコードの計算方法
公式code = 16 + 36*r + 6*g + bによるANSI 216色キューブの仕組みを学ぶ。RGB値とANSI 256色コード間のプログラムによる変換方法。
256 Colors
詳細な説明
6x6x6カラーキューブ
256色パレットの色16-231は6x6x6カラーキューブを形成します。その数学を理解することで、RGB値とANSIカラーコード間をプログラム的に変換できます。
公式
code = 16 + (36 * r) + (6 * g) + b
r、g、bは0から5のインデックスで、以下のRGB値を表します:
| インデックス | RGB値 |
|---|---|
| 0 | 0 |
| 1 | 95 |
| 2 | 135 |
| 3 | 175 |
| 4 | 215 |
| 5 | 255 |
逆計算
カラーコードからRGB値を見つけるには:
# Python: ANSIコードをRGBに変換
def ansi_to_rgb(code):
code -= 16
b = code % 6
g = (code // 6) % 6
r = code // 36
values = [0, 95, 135, 175, 215, 255]
return (values[r], values[g], values[b])
最も近い256色の検索
任意のRGB値がある場合、最も近いマッチを見つけます:
def rgb_to_ansi256(r, g, b):
values = [0, 95, 135, 175, 215, 255]
ri = min(range(6), key=lambda i: abs(values[i] - r))
gi = min(range(6), key=lambda i: abs(values[i] - g))
bi = min(range(6), key=lambda i: abs(values[i] - b))
return 16 + (36 * ri) + (6 * gi) + bi
キューブ内の一般的な色
| 色 | コード | RGB |
|---|---|---|
| 純粋な赤 | 196 | (255, 0, 0) |
| 純粋な緑 | 46 | (0, 255, 0) |
| 純粋な青 | 21 | (0, 0, 255) |
| 黄 | 226 | (255, 255, 0) |
| シアン | 51 | (0, 255, 255) |
| マゼンタ | 201 | (255, 0, 255) |
| オレンジ | 208 | (255, 175, 0) |
| ピンク | 213 | (255, 135, 255) |
実用的な例
# 赤軸に沿ったカラーグラデーションを表示
for r in 0 1 2 3 4 5; do
code=$((16 + 36 * r))
echo -en "\033[48;5;${code}m \033[0m"
done
echo
ユースケース
カラーキューブの数学を理解することは、ターミナルカラーライブラリ、構文ハイライトエンジン、またはWebカラー(hex/RGB)を最も近いANSI 256色に変換する必要があるツールを構築する開発者にとって重要です。chalk、colorama、termcolorなどのライブラリは、便利なカラーAPIを提供するためにこのアルゴリズムを内部的に使用しています。