Archive Browser
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
This software may be used free of charge, but as with all free software there are costs involved to develop and maintain.
If this site or its services have saved you time, please consider a donation to help with running costs and timely updates.
Donate