Download CmykRgbColorConversion.zip, last updated 15/07/2018 (19.21 KB)

Download
  • md5: 1258961adc735c8388f9b35d867df7c6
  • sha1: 1e01eb8723aac6632f1c0fff5fb57f524116329c
  • sha256: cfc2141a0f0820962621bc35e10882e648c95496751b65ded610a0009faae5a6
using System;
using System.Drawing;
using System.Windows.Forms;

// Converting colours between RGB and CMYK in C#
// https://www.cyotek.com/blog/converting-colours-between-rgb-and-cmyk-in-csharp
// Copyright © 2018 Cyotek Ltd. All Rights Reserved.

// This work is licensed under the Creative Commons Attribution 4.0 International License.
// To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/.

// Found this example useful? 
// https://www.paypal.me/cyotek

namespace Cyotek.Demo.CmykRgbColorConversion
{
  public partial class MainForm : Form
  {
    #region Fields

    private bool _updating;

    #endregion

    #region Constructors

    public MainForm()
    {
      this.InitializeComponent();
    }

    #endregion

    #region Methods

    protected override void OnLoad(EventArgs e)
    {
      Font font;

      font = SystemFonts.MessageBoxFont;

      this.Font = font;

      base.OnLoad(e);

      this.SetDefaultColor();

      matchLabel.Font = new Font(font, FontStyle.Bold);
    }

    protected override void OnShown(EventArgs e)
    {
      base.OnShown(e);

      Color[] palette;
      int h;

      palette = this.GetArne16Palette();
      h = palettePanel.Height;

      for (int i = 0; i < palette.Length; i++)
      {
        ColorBox control;

        control = new ColorBox
                  {
                    Color = palette[i],
                    Left = i * (h + 3),
                    Top = 0,
                    Width = h,
                    Height = h
                  };

        control.Click += this.ColorPaletteClickHandler;

        palettePanel.Controls.Add(control);
      }
    }

    protected override bool ProcessDialogKey(Keys keyData)
    {
      bool result;

      if (keyData == (Keys.Control | Keys.D))
      {
        this.SetDefaultColor();
        result = true;
      }
      else
      {
        result = base.ProcessDialogKey(keyData);
      }

      return result;
    }

    private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
    {
      using (Form form = new AboutDialog())
      {
        form.ShowDialog();
      }
    }

    private void bNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      bTrackBar.Value = (int)bNumericUpDown.Value;

      this.ConvertFromRgb();
    }

    private void bTrackBar_ValueChanged(object sender, EventArgs e)
    {
      bNumericUpDown.Value = bTrackBar.Value;
    }

    private void cNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      cTrackBar.Value = (int)cNumericUpDown.Value;

      this.ConvertFromCmyk();
    }

    private void ColorPaletteClickHandler(object sender, EventArgs e)
    {
      ColorBox control;
      Color color;

      control = (ColorBox)sender;
      color = control.Color;

      rNumericUpDown.Value = color.R;
      gNumericUpDown.Value = color.G;
      bNumericUpDown.Value = color.B;
    }

    private void ConvertFromCmyk()
    {
      float c;
      float m;
      float y;
      float k;
      Color converted;

      c = (float)(cNumericUpDown.Value / 100);
      m = (float)(mNumericUpDown.Value / 100);
      y = (float)(yNumericUpDown.Value / 100);
      k = (float)(kNumericUpDown.Value / 100);

      converted = ColorConvert.ConvertCmykToRgb(c, m, y, k);

      cmykColorBox.Color = converted;

      if (!_updating)
      {
        _updating = true;

        rNumericUpDown.Value = converted.R;
        gNumericUpDown.Value = converted.G;
        bNumericUpDown.Value = converted.B;

        _updating = false;
      }
    }

    private void ConvertFromRgb()
    {
      int r;
      int g;
      int b;
      CmykColor converted;

      r = (int)rNumericUpDown.Value;
      g = (int)gNumericUpDown.Value;
      b = (int)bNumericUpDown.Value;

      rgbColorBox.Color = Color.FromArgb(r, g, b);

      converted = ColorConvert.ConvertRgbToCmyk(r, g, b);

      if (!_updating)
      {
        _updating = true;

        cNumericUpDown.Value = Convert.ToInt32(converted.C * 100);
        mNumericUpDown.Value = Convert.ToInt32(converted.M * 100);
        yNumericUpDown.Value = Convert.ToInt32(converted.Y * 100);
        kNumericUpDown.Value = Convert.ToInt32(converted.K * 100);

        _updating = false;
      }
    }

    private void cTrackBar_ValueChanged(object sender, EventArgs e)
    {
      cNumericUpDown.Value = cTrackBar.Value;
    }

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
      this.Close();
    }

    private Color[] GetArne16Palette()
    {
      return new[]
             {
               Color.FromArgb(0, 0, 0),
               Color.FromArgb(157, 157, 157),
               Color.FromArgb(255, 255, 255),
               Color.FromArgb(190, 38, 51),
               Color.FromArgb(224, 111, 139),
               Color.FromArgb(73, 60, 43),
               Color.FromArgb(164, 100, 34),
               Color.FromArgb(235, 137, 49),
               Color.FromArgb(247, 226, 107),
               Color.FromArgb(47, 72, 78),
               Color.FromArgb(68, 137, 26),
               Color.FromArgb(163, 206, 39),
               Color.FromArgb(27, 38, 50),
               Color.FromArgb(0, 87, 132),
               Color.FromArgb(49, 162, 242),
               Color.FromArgb(178, 220, 239)
             };
    }

    private void gNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      gTrackBar.Value = (int)gNumericUpDown.Value;

      this.ConvertFromRgb();
    }

    private void gTrackBar_ValueChanged(object sender, EventArgs e)
    {
      gNumericUpDown.Value = gTrackBar.Value;
    }

    private void kNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      kTrackBar.Value = (int)kNumericUpDown.Value;

      this.ConvertFromCmyk();
    }

    private void kTrackBar_ValueChanged(object sender, EventArgs e)
    {
      kNumericUpDown.Value = kTrackBar.Value;
    }

    private void mNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      mTrackBar.Value = (int)mNumericUpDown.Value;

      this.ConvertFromCmyk();
    }

    private void mTrackBar_ValueChanged(object sender, EventArgs e)
    {
      mNumericUpDown.Value = mTrackBar.Value;
    }

    private void rgbColorBox_ColorChanged(object sender, EventArgs e)
    {
      string text;
      Color color;

      if (rgbColorBox.Color.Equals(cmykColorBox.Color))
      {
        color = Color.SeaGreen;
        text = "Match";
      }
      else
      {
        color = Color.Firebrick;
        text = "Mismatch";
      }

      matchLabel.Text = text;
      matchLabel.ForeColor = color;
    }

    private void rNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      rTrackBar.Value = (int)rNumericUpDown.Value;

      this.ConvertFromRgb();
    }

    private void rTrackBar_ValueChanged(object sender, EventArgs e)
    {
      rNumericUpDown.Value = rTrackBar.Value;
    }

    private void SetDefaultColor()
    {
      cNumericUpDown.Value = 37;
      mNumericUpDown.Value = 18;
      yNumericUpDown.Value = 0;
      kNumericUpDown.Value = 31;
    }

    private void yNumericUpDown_ValueChanged(object sender, EventArgs e)
    {
      yTrackBar.Value = (int)yNumericUpDown.Value;

      this.ConvertFromCmyk();
    }

    private void yTrackBar_ValueChanged(object sender, EventArgs e)
    {
      yNumericUpDown.Value = yTrackBar.Value;
    }

    #endregion
  }
}

Donate

Donate