using System;
using System.Drawing;

/// <summary>Представление цвета в пространстве CMY</summary>
public struct CMY
{
	byte cyan;
	byte magenta;
	byte yellow;

	public CMY(byte cyan, byte magenta, byte yellow)
	{
		this.cyan = cyan;
		this.magenta = magenta;
		this.yellow = yellow;
	}

	/// <summary>Конструктор для преобразования цвета из пространства RGB</summary>
	/// <param name="rgb">Цвет в пространстве RGB</param>
	public CMY(Color rgb)
	{
		this.cyan = (byte)(255 - rgb.R);
		this.magenta = (byte)(255 - rgb.G);
		this.yellow = (byte)(255 - rgb.B);
	}

	/// <summary>Преобразование цвета из пространства CMYK в пространство RGB</summary>
	/// <param name="cmyk">Цвет в пространстве CMYK</param>
	/// <returns>Цвет в пространстве RGB</returns>
	public static implicit operator Color(CMY cmy)
	{
		return Color.FromArgb(255 - cmy.cyan,
							  255 - cmy.magenta,
							  255 - cmy.yellow);
	}

	public static implicit operator CMY(Color color)
	{
		return new CMY(color);
	}

	public byte C
	{
		get { return cyan; }
	}

	public byte M
	{
		get { return magenta; }
	}

	public byte Y
	{
		get { return yellow; }
	}

	public override string ToString()
	{
		return string.Format("CMY({0}, {1}, {2})", cyan, magenta, yellow);
	}
}