public static void CmykToRgb(CmykColor cmykColor, ref RgbColor rgbColor) { cmykColor.Cyan = Math.Min(1f, Math.Max(0.0f, cmykColor.Cyan)); cmykColor.Magenta = Math.Min(1f, Math.Max(0.0f, cmykColor.Magenta)); cmykColor.Yellow = Math.Min(1f, Math.Max(0.0f, cmykColor.Yellow)); cmykColor.Black = Math.Min(1f, Math.Max(0.0f, cmykColor.Black)); rgbColor.Red = (float)(1.0 - (double)cmykColor.Cyan * (1.0 - (double)cmykColor.Black)) - cmykColor.Black; rgbColor.Green = (float)(1.0 - (double)cmykColor.Magenta * (1.0 - (double)cmykColor.Black)) - cmykColor.Black; rgbColor.Blue = (float)(1.0 - (double)cmykColor.Yellow * (1.0 - (double)cmykColor.Black)) - cmykColor.Black; rgbColor.Red = Math.Min(1f, Math.Max(0.0f, rgbColor.Red)); rgbColor.Green = Math.Min(1f, Math.Max(0.0f, rgbColor.Green)); rgbColor.Blue = Math.Min(1f, Math.Max(0.0f, rgbColor.Blue)); }
public static void HlsToRgb(HlsColor hlsColor, ref RgbColor rgbColor) { hlsColor.Hue = Math.Min(1f, Math.Max(0.0f, hlsColor.Hue)); hlsColor.Lightness = Math.Min(1f, Math.Max(0.0f, hlsColor.Lightness)); hlsColor.Saturation = Math.Min(1f, Math.Max(0.0f, hlsColor.Saturation)); if ((double)hlsColor.Saturation == 0.0) { rgbColor.Red = rgbColor.Green = rgbColor.Blue = hlsColor.Lightness; } else { float hue = (float)(((double)hlsColor.Hue - Math.Floor((double)hlsColor.Hue)) * 6.0); float n2 = (double)hlsColor.Lightness > 0.5 ? (float)((double)hlsColor.Lightness + (double)hlsColor.Saturation - (double)hlsColor.Lightness * (double)hlsColor.Saturation) : hlsColor.Lightness * (1f + hlsColor.Saturation); float n1 = 2f * hlsColor.Lightness - n2; rgbColor.Red = ColorUtility.HlsValue(n1, n2, hue + 2f); rgbColor.Green = ColorUtility.HlsValue(n1, n2, hue); rgbColor.Blue = ColorUtility.HlsValue(n1, n2, hue - 2f); } rgbColor.Red = Math.Min(1f, Math.Max(0.0f, rgbColor.Red)); rgbColor.Green = Math.Min(1f, Math.Max(0.0f, rgbColor.Green)); rgbColor.Blue = Math.Min(1f, Math.Max(0.0f, rgbColor.Blue)); }
public static void RgbToCmyk(RgbColor rgbColor, ref CmykColor cmykColor) { rgbColor.Red = Math.Min(1f, Math.Max(0.0f, rgbColor.Red)); rgbColor.Green = Math.Min(1f, Math.Max(0.0f, rgbColor.Green)); rgbColor.Blue = Math.Min(1f, Math.Max(0.0f, rgbColor.Blue)); cmykColor.Cyan = 1f - rgbColor.Red; cmykColor.Magenta = 1f - rgbColor.Green; cmykColor.Yellow = 1f - rgbColor.Blue; cmykColor.Black = Math.Min(cmykColor.Cyan, Math.Min(cmykColor.Magenta, cmykColor.Yellow)); if ((double)cmykColor.Black == 1.0) { cmykColor.Cyan = cmykColor.Magenta = cmykColor.Yellow = 0.0f; } else { cmykColor.Cyan = (float)(((double)cmykColor.Cyan - (double)cmykColor.Black) / (1.0 - (double)cmykColor.Black)); cmykColor.Magenta = (float)(((double)cmykColor.Magenta - (double)cmykColor.Black) / (1.0 - (double)cmykColor.Black)); cmykColor.Yellow = (float)(((double)cmykColor.Yellow - (double)cmykColor.Black) / (1.0 - (double)cmykColor.Black)); } cmykColor.Cyan = Math.Min(1f, Math.Max(0.0f, cmykColor.Cyan)); cmykColor.Magenta = Math.Min(1f, Math.Max(0.0f, cmykColor.Magenta)); cmykColor.Yellow = Math.Min(1f, Math.Max(0.0f, cmykColor.Yellow)); cmykColor.Black = Math.Min(1f, Math.Max(0.0f, cmykColor.Black)); }
public static void HsbToRgb(HsbColor hsbColor, ref RgbColor rgbColor) { hsbColor.Hue = Math.Min(1f, Math.Max(0.0f, hsbColor.Hue)); hsbColor.Saturation = Math.Min(1f, Math.Max(0.0f, hsbColor.Saturation)); hsbColor.Brightness = Math.Min(1f, Math.Max(0.0f, hsbColor.Brightness)); if ((double)hsbColor.Saturation == 0.0) { rgbColor.Red = rgbColor.Green = rgbColor.Blue = hsbColor.Brightness; } else { float num1 = (float)(((double)hsbColor.Hue - Math.Floor((double)hsbColor.Hue)) * 6.0); int num2 = (int)num1; float num3 = num1 - (float)num2; float num4 = hsbColor.Brightness * (1f - hsbColor.Saturation); float num5 = hsbColor.Brightness * (float)(1.0 - (double)hsbColor.Saturation * (double)num3); float num6 = hsbColor.Brightness * (float)(1.0 - (double)hsbColor.Saturation * (1.0 - (double)num3)); switch (num2 % 6) { case 0: rgbColor.Red = hsbColor.Brightness; rgbColor.Green = num6; rgbColor.Blue = num4; break; case 1: rgbColor.Red = num5; rgbColor.Green = hsbColor.Brightness; rgbColor.Blue = num4; break; case 2: rgbColor.Red = num4; rgbColor.Green = hsbColor.Brightness; rgbColor.Blue = num6; break; case 3: rgbColor.Red = num4; rgbColor.Green = num5; rgbColor.Blue = hsbColor.Brightness; break; case 4: rgbColor.Red = num6; rgbColor.Green = num4; rgbColor.Blue = hsbColor.Brightness; break; case 5: rgbColor.Red = hsbColor.Brightness; rgbColor.Green = num4; rgbColor.Blue = num5; break; default: throw new InvalidOperationException(ExceptionStringTable.CannotReachHere); } } rgbColor.Red = Math.Min(1f, Math.Max(0.0f, rgbColor.Red)); rgbColor.Green = Math.Min(1f, Math.Max(0.0f, rgbColor.Green)); rgbColor.Blue = Math.Min(1f, Math.Max(0.0f, rgbColor.Blue)); }