# HSV To RGB

This algorithm converts HSV color model to RGB color model.

```									```public struct RGB
{
private byte _r;
private byte _g;
private byte _b;

public RGB(byte r, byte g, byte b)
{
this._r = r;
this._g = g;
this._b = b;
}

public byte R
{
get { return this._r; }
set { this._r = value; }
}

public byte G
{
get { return this._g; }
set { this._g = value; }
}

public byte B
{
get { return this._b; }
set { this._b = value; }
}

public bool Equals(RGB rgb)
{
return (this.R == rgb.R) && (this.G == rgb.G) && (this.B == rgb.B);
}
}

public struct HSV
{
private double _h;
private double _s;
private double _v;

public HSV(double h, double s, double v)
{
this._h = h;
this._s = s;
this._v = v;
}

public double H
{
get { return this._h; }
set { this._h = value; }
}

public double S
{
get { return this._s; }
set { this._s = value; }
}

public double V
{
get { return this._v; }
set { this._v = value; }
}

public bool Equals(HSV hsv)
{
return (this.H == hsv.H) && (this.S == hsv.S) && (this.V == hsv.V);
}
}

public static RGB HSVToRGB(HSV hsv)
{
double r = 0, g = 0, b = 0;

if (hsv.S == 0)
{
r = hsv.V;
g = hsv.V;
b = hsv.V;
}
else
{
int i;
double f, p, q, t;

if (hsv.H == 360)
hsv.H = 0;
else
hsv.H = hsv.H / 60;

i = (int)Math.Truncate(hsv.H);
f = hsv.H - i;

p = hsv.V * (1.0 - hsv.S);
q = hsv.V * (1.0 - (hsv.S * f));
t = hsv.V * (1.0 - (hsv.S * (1.0 - f)));

switch (i)
{
case 0:
r = hsv.V;
g = t;
b = p;
break;

case 1:
r = q;
g = hsv.V;
b = p;
break;

case 2:
r = p;
g = hsv.V;
b = t;
break;

case 3:
r = p;
g = q;
b = hsv.V;
break;

case 4:
r = t;
g = p;
b = hsv.V;
break;

default:
r = hsv.V;
g = p;
b = q;
break;
}

}

return new RGB((byte)(r * 255), (byte)(g * 255), (byte)(b * 255));
}```
```

### Example

```									```HSV data = new HSV(154, 0.43, 0.60);
RGB value = HSVToRGB(data);```
```

### Output

```									```R: 87
G: 153
B: 124```
```