因此,我正在尝试创建CMYK <-> RGB转换器,该转换器将允许用户移动所选配置文件的轨迹栏(CMYK或RGB-用户可以选择他要使用的任何轨迹栏)。但是,它只能以一种方式起作用-取决于首先编写哪种方法。下面是我的两种转换方法:
void sliderValuesCMYKtoRGB(object sender, EventArgs e)
{
sliderR.Value = Convert.ToByte(255 * (1 - (sliderC.Value / 100)) * (1 - (sliderK.Value / 100)));
sliderG.Value = Convert.ToByte(255 * (1 - (sliderM.Value / 100)) * (1 - (sliderK.Value / 100)));
sliderB.Value = Convert.ToByte(255 * (1 - (sliderY.Value / 100)) * (1 - (sliderK.Value / 100)));
}
void sliderValuesRGBtoCMYK(object sender, EventArgs e)
{
double sliderRValue, sliderGValue, sliderBValue;
sliderRValue = sliderR.Value / 255F;
sliderGValue = sliderG.Value / 255F;
sliderBValue = sliderB.Value / 255F;
sliderK.Value = ClampCmyk(1 - Math.Max(Math.Max(sliderRValue, sliderGValue), sliderBValue));
sliderC.Value = ClampCmyk(((1 - sliderRValue - sliderK.Value) / (1 - sliderK.Value)) * 100);
sliderM.Value = ClampCmyk(((1 - sliderGValue - sliderK.Value) / (1 - sliderK.Value)) * 100);
sliderY.Value = ClampCmyk(((1 - sliderBValue - sliderK.Value) / (1 - sliderK.Value)) * 100);
sliderK.Value = sliderK.Value * 100;
sliderC.Value = Math.Round(sliderC.Value, 0);
sliderM.Value = Math.Round(sliderM.Value, 0);
sliderY.Value = Math.Round(sliderY.Value, 0);
sliderK.Value = Math.Round(sliderK.Value, 0);
}
在这里您可以看到我的主要内容:
public Calc()
{
InitializeComponent();
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += calcValues_Tick;
dispatcherTimer.Tick += dispatcherTimer_Tick;
dispatcherTimer.Tick += sliderValuesRGBtoCMYK;
dispatcherTimer.Tick += sliderValuesCMYKtoRGB;
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);
dispatcherTimer.Start();
}
所有轨迹栏值都存储在config中。现在这是我的问题-如何使转换器双向工作?我尝试了多线程,但不确定完全正确地完成了所有操作。