ある表色系(色空間・カラースペース)から別の表色系に変換する式とサンプルなど。
代表的な表色系の種類
- RGB
- 加法混色の表色系、R(赤)、G(緑)、B(青)の三原色の強さによって色を表す
- CMY
- 減法混色の表色系、C(シアン)、M(マゼンタ)、Y(黄)の三原色の濃度によって色を表す
- CMYK
- 黒の発色をよくするためにCMYを拡張してK(Key plate)の濃度を加えた表色系
印刷物などの表色に用いられ、シアン・マゼンタ・黄・黒のインクの濃度を表す - HSV (HSB)
- H(hue,色相)、S(saturation,彩度),V(value,明度)の三要素によって色を表す
色相は環状の値で、通常0度から360度で表す
彩度0%が無彩色、彩度100%が純色を表す - HSL (HLS, HSI)
- HSV同様、H(hue,色相)、S(saturation,彩度),L(lightness/luminance,輝度)の三要素によって色を表す
HSVと異なり、彩度に関わらず輝度0%が黒、輝度100%が白を表し、50%の場合純色を表す - YCbCr
- Y(luma,輝度成分)とCb(blue-difference chroma,青の色差成分)、Cr(red-difference chroma,赤の色差成分)の三要素によって色を表す
動画処理などの映像技術に用いられる
表色系の変換スクリプト
色 | 表色系 | 値 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
カラーコード | |||||||||
カラーネーム | ||||||||||
RGB | ||||||||||
CMY | ||||||||||
CMYK | ||||||||||
HSV | ||||||||||
HSL |
- 使い方
- カラーコードもしくは各表色系での値を入力してsetをクリックすると、対応する色と他の表色系での表現を得られます
- RGB, CMY, CMYK
- それぞれ16進で00~ffの範囲の数値を入力してください
- HSV, HSL
- S, V, Lは0.0~1.0の範囲の数値を入力してください
Hは0~359の範囲の数値を入力してください (360を超える値は自動的に0~359の範囲に正規化します) - 近似色
- 名前(カラーネーム)が定義されている147色のうち、現在の色に最も近い色を表示します
- 階調の反転
- 現在の色をネガポジ反転した色を表示します
- 補色
- 現在の色の彩度・明度を維持したまま色相だけを反転した色を表示します
- 純色
- 現在の色の彩度・明度を最大(1.0)にした色を表示します
- 無彩色
- 現在の色の彩度を最小(0.0)にした色を表示します
変換式
RGB⇄CMY
R, G, B, C, M, Yの値域が0〜255(8ビット)の場合。
RGB⇄CMYK
R, G, B, C, M, Y, Kの値域が0〜255(8ビット)の場合。
RGB→CMYK
CMYK→RGB
RGB⇄HSV
R, G, B, S, Vの値域が0〜255(8ビット)、Hの値域が0〜359の場合。
RGB→HSV
HSV→RGB
省略。 後述する実装例もしくはHSV色空間 - Wikipediaを参照。
RGB⇄YCbCr
スケーリングされていないYCbCrの場合
スケーリングされたYCbCrの場合
R, G, Bの値域が0〜255(8ビット)、Yの値域が16〜235(8ビット)、Cb, Crの値域が16〜240(8ビット、128=色差なし)の場合。
実装例
.NET FrameworkでのRGB→HSL変換
.NET FrameworkのColor構造体に用意されているメソッドGetHue(), GetSaturation(), GetBrightness()を用いることでRGBからHSLへの変換ができる。 なお、ドキュメントではこれらのメソッドはHSB表色系の値を返すように記述されているが、実際に返される値はHSL表色系になっている模様。
VB.NETでのRGB, CMYK, HSV相互変換の実装例
構造体宣言
それぞれのカラースペースでの色データを表す構造体を作成。
ColorConverter
変換メソッドとその他のユーティリティメソッドをもったクラスを作成。
C#でのYCbCr→RGB変換の実装例
この例でyuvはYUV422フォーマット(Y0CbY1Crの順)で格納されたピクセルへのbyte*型ポインタ、bgrはBGRの順で格納されるピクセルへのbyte*型ポインタを表す。