CMYK到RGB转换器不能同时工作

时间:2019-01-24 21:31:07

标签: c# multithreading

因此,我正在尝试创建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中。现在这是我的问题-如何使转换器双向工作?我尝试了多线程,但不确定完全正确地完成了所有操作。

0 个答案:

没有答案