このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
任意のカラーテーブルを使って減色する場合、
元の色の近似色をカラーテーブルから探す必要がある。
「近さ」をどのように考えるか。
RGB の色は RGB 3 次元空間の点として考えることができる。
今までは区間で等間隔に区切っていたため、
軸(色要素)ごとに独立した単純な計算でよかったが、
カラーテーブルが空間上の任意の点となるとそうはいかない。
空間上においては、近さは「距離」として考えられる。
元の色に最も近い色を選ぶためには、
カラーテーブルの色を調べて、
最も距離が近い色を選ぶということになる。
2 点間の距離はどうして計算するか。これは意外と簡単だ。
ここでいう RGB 空間は、ユークリッド空間なので、
ピタゴラス(三平方)の定理を元に考えると、
自乗和の平方根で計算することができる。
my ($r1, $g1, $b1); # 色1
my ($r2, $g2, $b2); # 色2
my $distance =
sqrt(($r2 - $r1) ** 2 + ($g2 - $g1) ** 2 + ($b2 - $b1) ** 2);
これを使えば、どの色に対しても、
最も近い色を求めることができることとなる。
もし、人間の視覚を重視するならば、
緑や赤の座標軸のスケールを増やして計算すれば、
それらに対する重要度を調整することもできる。