programming/tips/colorspaces/index.wiki.txt

current previous
1,5 1,5
~
${smdncms:title,表色系の相互変換}
${smdncms:title,カラースペース変換式}
~
${smdncms:keywords,カラースペース,色空間,変換,RGB,CMYK,HSV,HSB,HSL,HSI,表色系}
${smdncms:keywords,カラースペース,色空間,変換,RGB,CMYK,HSV,表色系}
 
${smdncms:tags,algo,lang/vb,lang/c#}
${smdncms:tags,algo,lang/vb,lang/c#}
 
ある表色系(色空間・カラースペース)から別の表色系に変換する式とサンプルなど。
ある表色系(色空間・カラースペース)から別の表色系に変換する式とサンプルなど。
 

        

        
15,468 15,12
 
:CMY|減法混色の表色系、C(シアン)、M(マゼンタ)、Y(黄)の三原色の濃度によって色を表す
:CMY|減法混色の表色系、C(シアン)、M(マゼンタ)、Y(黄)の三原色の濃度によって色を表す
 
:CMYK|黒の発色をよくするためにCMYを拡張してK(Key plate)の濃度を加えた表色系
:CMYK|黒の発色をよくするためにCMYを拡張してK(Key plate)の濃度を加えた表色系
 
印刷物などの表色に用いられ、シアン・マゼンタ・黄・黒のインクの濃度を表す
印刷物などの表色に用いられ、シアン・マゼンタ・黄・黒のインクの濃度を表す
~
:HSV (HSB)|H(hue,色相)、S(saturation,彩度),V(value,明度)の三要素によって色を表す
:HSV|H(hue,色相)、S(saturation,彩度),V(value,明度)の三要素によって色を表す
 
色相は環状の値で、通常0度から360度で表す
色相は環状の値で、通常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,赤の色差成分)の三要素によって色を表す
:YCbCr|Y(luma,輝度成分)とCb(blue-difference chroma,青の色差成分)、Cr(red-difference chroma,赤の色差成分)の三要素によって色を表す
 
動画処理などの映像技術に用いられる
動画処理などの映像技術に用いられる
 

        

        
~
**表色系の変換スクリプト
*RGB⇄CMY
+
#html{{
+
<table>
+
  <thead>
+
    <th>色</th>
+
    <th>表色系</th>
+
    <th>値</th>
+
  </thead>
+
  <tr>
+
    <td style="text-align: center;" rowspan="7">
+
      <div id="csview-preview" style="width: 120px; height: 120px; border: double 3px black;"/>
+
      <div id="csview-info">-</div>
+
      <div><input type="reset" onclick="csviewSetColor(0xff, 0xff, 0xff);"/></div>
+
    </td>
+
    <th>カラーコード</th>
+
    <td>
+
      <form>
+
        #<input id="csview-colorcode" type="text" size="6"/>
+
        <input type="button" value="set" onclick="cmviewSetColorByColorCode();"/>
+
      </form>
+
    </td>
+
  </tr>
+
    <th>RGB</th>
+
    <td>
+
      <form>
+
        R:<input id="csview-rgb-r" type="text" size="2"/>
+
        G:<input id="csview-rgb-g" type="text" size="2"/>
+
        B:<input id="csview-rgb-b" type="text" size="2"/>
+
        <input type="button" value="set" onclick="cmviewSetColorByRgb();"/>
+
      </form>
+
    </td>
+
  <tr>
+
  </tr>
+
  <tr>
+
    <th>CMY</th>
+
    <td>
+
      <form>
+
        C:<input id="csview-cmy-c" type="text" size="2"/>
+
        M:<input id="csview-cmy-m" type="text" size="2"/>
+
        Y:<input id="csview-cmy-y" type="text" size="2"/>
+
        <input type="button" value="set" onclick="cmviewSetColorByCmy();"/>
+
      </form>
+
    </td>
+
  </tr>
+
  <tr>
+
    <th>CMYK</th>
+
    <td>
+
      <form>
+
        C:<input id="csview-cmyk-c" type="text" size="2"/>
+
        M:<input id="csview-cmyk-m" type="text" size="2"/>
+
        Y:<input id="csview-cmyk-y" type="text" size="2"/>
+
        K:<input id="csview-cmyk-k" type="text" size="2"/>
+
        <input type="button" value="set" onclick="cmviewSetColorByCmyk();"/>
+
      </form>
+
    </td>
+
  </tr>
+
  <tr>
+
    <th>HSV</th>
+
    <td>
+
      <form>
+
        H:<input id="csview-hsv-h" type="text" size="3"/>
+
        S:<input id="csview-hsv-s" type="text" size="4"/>
+
        V:<input id="csview-hsv-v" type="text" size="4"/>
+
        <input type="button" value="set" onclick="cmviewSetColorByHsv();"/>
+
      </form>
+
    </td>
+
  </tr>
+
  <tr>
+
    <th>HSL</th>
+
    <td>
+
      <form>
+
        H:<input id="csview-hsl-h" type="text" size="3"/>
+
        S:<input id="csview-hsl-s" type="text" size="4"/>
+
        L:<input id="csview-hsl-l" type="text" size="4"/>
+
        <input type="button" value="set" onclick="cmviewSetColorByHsl();"/>
+
      </form>
+
    </td>
+
  </tr>
+
</table>
+
}}
+
:使い方|カラーコードもしくは各表色系での値を入力してsetをクリックすると、対応する色と他の表色系での表現を得られます
+
::RGB, CMY, CMYK|それぞれ16進で00~ffの範囲の数値を入力してください
+
::HSV, HSL|S, V, Lは0.0~1.0の範囲の数値を入力してください
+
Hは0~359の範囲の数値を入力してください (360を超える値は自動的に0~359の範囲に正規化します)
+
#javascript(csview,noscript=実行するにはJavaScriptを有効にしてください){{
+
$(function() {
+
  csviewSetColor(0xff, 0xff, 0xff);
+
});
+

         
+
function csviewSetColor(r, g, b)
+
{
+
  try {
+
    if (r < 0 || 255 < r)
+
      throw "out of range (R)";
+
    if (g < 0 || 255 < g)
+
      throw "out of range (G)";
+
    if (b < 0 || 255 < b)
+
      throw "out of range (B)";
+

         
+
    r = Math.round(r);
+
    g = Math.round(g);
+
    b = Math.round(b);
+

         
+
    var rgbHex = toPaddedHex(r) + toPaddedHex(g) + toPaddedHex(b);
+
    var colorCode = "#" + rgbHex;
+

         
+
    $("#csview-colorcode").val(rgbHex);
+
    $("#csview-preview").css("background-color", colorCode);
+
    $("#csview-info").replaceWith("<div id=\"csview-info\">" + colorCode + "<br/>" + "rgb(" + r + ", " + g + ", " + b + ");</div>");
+

         
+
    csviewSetRgb(r, g, b);
+
    csviewSetCmy(r, g, b);
+
    csviewSetCmyk(r, g, b);
+
    csviewSetHsv(r, g, b);
+
    csviewSetHsl(r, g, b);
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function csviewPrintError(e)
+
{
+
  $("#csview-info").text(e);
+
}
+

         
+
function min3(x, y, z)
+
{
+
  return Math.min(Math.min(x, y), z);
+
}
+

         
+
function max3(x, y, z)
+
{
+
  return Math.max(Math.max(x, y), z);
+
}
+

         
+
function toPaddedHex(x)
+
{
+
  var h = Math.round(x).toString(16);
+

         
+
  if (h.length == 1)
+
    return "0" + h;
+
  else
+
    return h;
+
}
+

         
+
function getHexValueOf(id)
+
{
+
  var val = parseInt($(id).val(), 16);
+

         
+
  if (isNaN(val))
+
    throw "invalid value (" + id + ")";
+
  else if (val < 0 || 255 < val)
+
    throw "out of range (" + id + ")";
+

         
+
  return val;
+
}
+

         
+
function getValueOf(arg)
+
{
+
  var val = parseFloat($(arg.id).val());
+

         
+
  if (isNaN(val))
+
    throw "invalid value (" + arg.id + ")";
+
  else if (arg.min !== undefined && val < arg.min)
+
    throw "out of range (" + arg.id + ")";
+
  else if (arg.max !== undefined && arg.max < val)
+
    throw "out of range (" + arg.id + ")";
+

         
+
  return val;
+
}
+

         
+
function cmviewSetColorByColorCode()
+
{
+
  try {
+
    var rgb = parseInt($("#csview-colorcode").val(), 16);
+

         
+
    if (isNaN(rgb))
+
      throw "invalid value";
+
    else if (rgb < 0 || 0xffffff < rgb)
+
      throw "out of range";
+

         
+
    csviewSetColor((rgb >> 16) & 0x0000ff,
+
                   (rgb >>  8) & 0x0000ff,
+
                    rgb        & 0x0000ff);
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function cmviewSetColorByRgb()
+
{
+
  try {
+
    csviewSetColor(getHexValueOf("#csview-rgb-r"),
+
                   getHexValueOf("#csview-rgb-g"),
+
                   getHexValueOf("#csview-rgb-b"));
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function csviewSetRgb(r, g, b)
+
{
+
  $("#csview-rgb-r").val(toPaddedHex(r));
+
  $("#csview-rgb-g").val(toPaddedHex(g));
+
  $("#csview-rgb-b").val(toPaddedHex(b));
+
}
+

         
+
function cmviewSetColorByCmy()
+
{
+
  try {
+
    csviewSetColor(255 - getHexValueOf("#csview-cmy-c"),
+
                   255 - getHexValueOf("#csview-cmy-m"),
+
                   255 - getHexValueOf("#csview-cmy-y"));
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function csviewSetCmy(r, g, b)
+
{
+
  $("#csview-cmy-c").val(toPaddedHex(255 - r));
+
  $("#csview-cmy-m").val(toPaddedHex(255 - g));
+
  $("#csview-cmy-y").val(toPaddedHex(255 - b));
+
}
+

         
+
function cmviewSetColorByCmyk()
+
{
+
  try {
+
    var c = getHexValueOf("#csview-cmyk-c");
+
    var m = getHexValueOf("#csview-cmyk-m");
+
    var y = getHexValueOf("#csview-cmyk-y");
+
    var k = getHexValueOf("#csview-cmyk-k");
+

         
+
    csviewSetColor(Math.max(0, 255 - c - k),
+
                   Math.max(0, 255 - m - k),
+
                   Math.max(0, 255 - y - k));
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function csviewSetCmyk(r, g, b)
+
{
+
  var k = min3(255 - r, 255 - g, 255 - b);
+

         
+
  $("#csview-cmyk-c").val(toPaddedHex(255 - r - k));
+
  $("#csview-cmyk-m").val(toPaddedHex(255 - g - k));
+
  $("#csview-cmyk-y").val(toPaddedHex(255 - b - k));
+
  $("#csview-cmyk-k").val(toPaddedHex(k));
+
}
+

         
+
function cmviewSetColorByHsv()
+
{
+
  try {
+
    var h = getValueOf({id: "#csview-hsv-h", min: 0.0});
+
    var s = getValueOf({id: "#csview-hsv-s", min: 0.0, max: 1.0});
+
    var v = getValueOf({id: "#csview-hsv-v", min: 0.0, max: 1.0});
+

         
+
    for (;;) {
+
      if (h < 360)
+
        break;
+
      else
+
        h -= 360;
+
    }
+

         
+
    v *= 255;
+

         
+
    var r, g, b;
+

         
+
    if (s == 0.0) {
+
      r = v;
+
      g = v;
+
      b = v;
+
    }
+
    else {
+
      var p = v * (1.0 - s);
+
      var ht = h * 6;
+
      var d = ht % 360;
+

         
+
      ht = Math.floor(ht / 360);
+

         
+
      if (ht % 2 == 0) {
+
        var t = v * (1.0 - s * (360 - d) / 360);
+

         
+
        switch (ht) {
+
          case 0:  r = v; g = t; b = p; break;
+
          case 2:  r = p; g = v; b = t; break;
+
          default: r = t; g = p; b = v; break;
+
        }
+
      }
+
      else {
+
        var q = v * (1.0 - s * d / 360);
+

         
+
        switch (ht) {
+
          case 1:  r = q; g = v; b = p; break;
+
          case 3:  r = p; g = q; b = v; break;
+
          default: r = v; g = p; b = q; break;
+
        }
+
      }
+
    }
+

         
+
    csviewSetColor(r, g, b);
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function csviewSetHsv(r, g, b)
+
{
+
  var max = max3(r, g, b);
+
  var min = min3(r, g, b);
+
  var d = max - min;
+
  var h, s, v;
+

         
+
  v = max / 255.0;
+

         
+
  if (d == 0)
+
    s = 0.0;
+
  else
+
    s = d / max;
+

         
+
  if (d == 0) {
+
    h = 0;
+
  }
+
  else {
+
    var rt = max - (r * 60.0 / d);
+
    var gt = max - (g * 60.0 / d);
+
    var bt = max - (b * 60.0 / d);
+

         
+
    if (r == max)
+
      h = bt - gt;
+
    else if (g == max)
+
      h = rt - bt + 120.0;
+
    else
+
      h = gt - rt + 240.0;
+

         
+
    if (h < 0)
+
      h += 360.0;
+
  }
+

         
+
  $("#csview-hsv-h").val(h.toFixed(0));
+
  $("#csview-hsv-s").val(s.toFixed(2));
+
  $("#csview-hsv-v").val(v.toFixed(2));
+
}
+

         
+
function cmviewSetColorByHsl()
+
{
+
  try {
+
    var h = getValueOf({id: "#csview-hsl-h", min: 0.0});
+
    var s = getValueOf({id: "#csview-hsl-s", min: 0.0, max: 1.0});
+
    var l = getValueOf({id: "#csview-hsl-l", min: 0.0, max: 1.0});
+

         
+
    for (;;) {
+
      if (h < 360)
+
        break;
+
      else
+
        h -= 360;
+
    }
+

         
+
    // HSL to RGB
+
    //   http://www.geekymonkey.com/Programming/CSharp/RGB2HSL_HSL2RGB.htm
+
    //   http://www.kanazawa-net.ne.jp/~pmansato/wpf/wpf_hsl.htm
+
    var v = (l <= 0.5) ? l + l * s : (l + s - l * s);
+

         
+
    if (v <= 0) {
+
      r = l;
+
      g = l;
+
      b = l;
+
    }
+
    else {
+
      h = h / 60.0; // (h / 360 * 6)
+

         
+
      var ht = Math.floor(h);
+
      var m = l + l - v;
+
      var vsf = (v - m) * (h - ht);
+

         
+
      if (ht % 2 == 0) {
+
        var t = m + vsf;
+

         
+
        switch (ht) {
+
          case 0:  r = v; g = t; b = m; break;
+
          case 2:  r = m; g = v; b = t; break;
+
          default: r = t; g = m; b = v; break;
+
        }
+
      }
+
      else {
+
        var t = v - vsf;
+

         
+
        switch (ht) {
+
          case 1:  r = t; g = v; b = m; break;
+
          case 3:  r = m; g = t; b = v; break;
+
          default: r = v; g = m; b = t; break;
+
        }
+
      }
+
    }
+

         
+
    csviewSetColor(r * 255, g * 255, b * 255);
+
  }
+
  catch (e) {
+
    csviewPrintError(e);
+
  }
+
}
+

         
+
function csviewSetHsl(r, g, b)
+
{
+
  var max = max3(r, g, b);
+
  var min = min3(r, g, b);
+
  var sum = max + min;
+
  var d = max - min;
+
  var h, s, l;
+

         
+
  l = sum / 510.0;
+

         
+
  if (min == max) {
+
    s = 0.0;
+
    h = 0.0;
+
  }
+
  else {
+
    if (255 < sum)
+
      sum = 510 - sum;
+

         
+
    s = d / sum;
+

         
+
    var rr = (max - r) / d;
+
    var gg = (max - g) / d;
+
    var bb = (max - b) / d;
+

         
+
    if (r == max)
+
      h = 60.0 * (6.0 + bb - gg);
+
    else if (g == max)
+
      h = 60.0 * (2.0 + rr - bb);
+
    else /*if (b == max)*/
+
      h = 60.0 * (4.0 + gg - rr);
+

         
+
    h = Math.round(h);
+

         
+
    if (360 <= h)
+
      h -= 360
+
  }
+

         
+
  $("#csview-hsl-h").val(h.toFixed(0));
+
  $("#csview-hsl-s").val(s.toFixed(2));
+
  $("#csview-hsl-l").val(l.toFixed(2));
+
}
+
}}
+

         
+
*変換式
+
**RGB⇄CMY
 
R, G, B, C, M, Yの値域が0〜255(8ビット)の場合。
R, G, B, C, M, Yの値域が0〜255(8ビット)の場合。
 
#code{{
#code{{
 
C = 255 - R
C = 255 - R
488,10 32,10
 
B = 255 - Y
B = 255 - Y
 
}}
}}
 

        

        
~
**RGB⇄CMYK
*RGB⇄CMYK
 
R, G, B, C, M, Y, Kの値域が0〜255(8ビット)の場合。
R, G, B, C, M, Y, Kの値域が0〜255(8ビット)の場合。
 

        

        
~
***RGB→CMYK
**RGB→CMYK
 
#code{{
#code{{
 
K = min(255 - R, 255 - G, 255 - B)
K = min(255 - R, 255 - G, 255 - B)
 
C = 255 - R - K
C = 255 - R - K
499,7 43,7
 
Y = 255 - B - K
Y = 255 - B - K
 
}}
}}
 

        

        
~
***CMYK→RGB
**CMYK→RGB
 
#code{{
#code{{
 
R' = 255 - C - K
R' = 255 - C - K
 
G' = 255 - M - K
G' = 255 - M - K
510,10 54,10
 
B = max(0, B')
B = max(0, B')
 
}}
}}
 

        

        
~
**RGB⇄HSV
*RGB⇄HSV
 
R, G, B, S, Vの値域が0〜255(8ビット)、Hの値域が0〜359の場合。
R, G, B, S, Vの値域が0〜255(8ビット)、Hの値域が0〜359の場合。
 

        

        
~
***RGB→HSV
**RGB→HSV
 
#code{{
#code{{
 
max = Max(R, G, B)
max = Max(R, G, B)
 
min = Min(R, G, B)
min = Min(R, G, B)
543,11 87,11
 
  H += 360
  H += 360
 
}}
}}
 

        

        
~
***HSV→RGB
**HSV→RGB
 
省略。 後述する実装例もしくは[[HSV色空間 - Wikipedia:http://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93]]を参照。
省略。 後述する実装例もしくは[[HSV色空間 - Wikipedia:http://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93]]を参照。
 

        

        
~
**RGB⇄YCbCr
*RGB⇄YCbCr
~
***スケーリングされていないYCbCrの場合
**スケーリングされていないYCbCrの場合
 
#code{{
#code{{
 
(Y ) = (+0.299  +0.587  +0.114) (R )
(Y ) = (+0.299  +0.587  +0.114) (R )
 
(Cb) = (-0.299  -0.587  +0.866) (G )
(Cb) = (-0.299  -0.587  +0.866) (G )
558,7 102,7
 
(B ) = (+1      +1         0      ) (Cr)
(B ) = (+1      +1         0      ) (Cr)
 
}}
}}
 

        

        
~
***スケーリングされたYCbCrの場合
**スケーリングされたYCbCrの場合
 
R, G, Bの値域が0〜255(8ビット)、Yの値域が16〜235(8ビット)、Cb, Crの値域が16〜240(8ビット、128=色差なし)の場合。
R, G, Bの値域が0〜255(8ビット)、Yの値域が16〜235(8ビット)、Cb, Crの値域が16〜240(8ビット、128=色差なし)の場合。
 

        

        
 
#code{{
#code{{
571,89 115,8
 
(B ) = (+1.164  +2.018   0    ) (Cr - 128)
(B ) = (+1.164  +2.018   0    ) (Cr - 128)
 
}}
}}
 

        

        
~
*実装例
*VB.NETでのRGB, CMYK, HSV相互変換の実装例
~
**.NET FrameworkでのRGB→HSL変換
**構造体宣言
+
.NET FrameworkのColor構造体に用意されているメソッド&msdn(netfx,method,System.Drawing.Color.GetHue){GetHue()};, &msdn(netfx,method,System.Drawing.Color.GetSaturation){GetSaturation()};, &msdn(netfx,method,System.Drawing.Color.GetBrightness){GetBrightness()};を用いることでRGBからHSLへの変換ができる。 なお、ドキュメントではこれらのメソッドはHSB表色系の値を返すように記述されているが、実際に返される値はHSL表色系になっている模様。
+

         
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Drawing;
+

         
+
class Sample {
+
  public static void Main()
+
  {
+
    foreach (var col in new[] {
+
      Color.Red,
+
      Color.Yellow,
+
      Color.Lime,
+
      Color.Cyan,
+
      Color.Blue,
+
      Color.Magenta,
+

         
+
      Color.Black,
+
      Color.Gray,
+
      Color.White,
+

         
+
      Color.FromArgb(0xff, 0xa0, 0xa0),
+
      Color.FromArgb(0xff, 0x80, 0x80),
+
      Color.FromArgb(0xc0, 0x60, 0x60),
+
      Color.FromArgb(0x80, 0x40, 0x40),
+
    }) {
+
      Console.Write("RGB({0:D3}, {1:D3}, {2:D3}) => ", col.R, col.G, col.B);
+
      Console.WriteLine("HSL({0,6:N2}, {1,7:P2}, {2,7:P2})", col.GetHue(), col.GetSaturation(), col.GetBrightness());
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB.NET)
+
#code(vb){{
+
Imports System
+
Imports System.Drawing
+

         
+
Class Sample
+
  Public Shared Sub Main()
+
    For Each col As Color In New Color() { _
+
      Color.Red, _
+
      Color.Yellow, _
+
      Color.Lime, _
+
      Color.Cyan, _
+
      Color.Blue, _
+
      Color.Magenta, _
+
      Color.Black, _
+
      Color.Gray, _
+
      Color.White, _
+
      Color.FromArgb(&hFF, &hA0, &hA0), _
+
      Color.FromArgb(&hFF, &h80, &h80), _
+
      Color.FromArgb(&hC0, &h60, &h60), _
+
      Color.FromArgb(&h80, &h40, &h40) _
+
    }
+
      Console.Write("RGB({0:D3}, {1:D3}, {2:D3}) => ", col.R, col.G, col.B)
+
      Console.WriteLine("HSL({0,6:N2}, {1,7:P2}, {2,7:P2})", col.GetHue(), col.GetSaturation(), col.GetBrightness())
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

         
+
#prompt(実行結果){{
+
RGB(255, 000, 000) => HSL(360.00, 100.00%,  50.00%)
+
RGB(255, 255, 000) => HSL( 60.00, 100.00%,  50.00%)
+
RGB(000, 255, 000) => HSL(120.00, 100.00%,  50.00%)
+
RGB(000, 255, 255) => HSL(180.00, 100.00%,  50.00%)
+
RGB(000, 000, 255) => HSL(240.00, 100.00%,  50.00%)
+
RGB(255, 000, 255) => HSL(300.00, 100.00%,  50.00%)
+
RGB(000, 000, 000) => HSL(  0.00,   0.00%,   0.00%)
+
RGB(128, 128, 128) => HSL(  0.00,   0.00%,  50.20%)
+
RGB(255, 255, 255) => HSL(  0.00,   0.00%, 100.00%)
+
RGB(255, 160, 160) => HSL(360.00, 100.00%,  81.37%)
+
RGB(255, 128, 128) => HSL(360.00, 100.00%,  75.10%)
+
RGB(192, 096, 096) => HSL(360.00,  43.24%,  56.47%)
+
RGB(128, 064, 064) => HSL(360.00,  33.33%,  37.65%)
+
}}
+

         
+
**VB.NETでのRGB, CMYK, HSV相互変換の実装例
+
***構造体宣言
 
それぞれのカラースペースでの色データを表す構造体を作成。
それぞれのカラースペースでの色データを表す構造体を作成。
 
#code(vb,RGB){{
#code(vb,RGB){{
 
''' <summary>
''' <summary>
833,7 296,7
 

        

        
 
}}
}}
 

        

        
~
***ColorConverter
**ColorConverter
 
変換メソッドとその他のユーティリティメソッドをもったクラスを作成。
変換メソッドとその他のユーティリティメソッドをもったクラスを作成。
 

        

        
 
#code(vb){{
#code(vb){{
1080,7 543,7
 
End Class
End Class
 
}}
}}
 

        

        
~
**C#でのYCbCr→RGB変換の実装例
*C#でのYCbCr→RGB変換の実装例
 
この例でyuvはYUV422フォーマット(Y0CbY1Crの順)で格納されたピクセルへのbyte*型ポインタ、bgrはBGRの順で格納されるピクセルへのbyte*型ポインタを表す。
この例でyuvはYUV422フォーマット(Y0CbY1Crの順)で格納されたピクセルへのbyte*型ポインタ、bgrはBGRの順で格納されるピクセルへのbyte*型ポインタを表す。
 
#code(cs){{
#code(cs){{
 
var y0 = +1.164f * (*(yuv++) -  16);
var y0 = +1.164f * (*(yuv++) -  16);