C# 移除图像上的过滤器

C# 移除图像上的过滤器,c#,image,image-processing,filter,color-channel,C#,Image,Image Processing,Filter,Color Channel,我正在使用Forge.net进行频道过滤,我有3个按钮,红色、蓝色和绿色。 当我点击红色按钮时,它将应用红色通道的过滤器。但是,当我继续单击蓝色按钮时,它将与红色重叠,图像变暗 是否有人知道,当单击蓝色通道时,如何“处置”红色通道,反之亦然,以便过滤器不会相互重叠?下面是我的代码片段 private void redchannel_Click_1(object sender, EventArgs e) { try { pictu

我正在使用Forge.net进行频道过滤,我有3个按钮,红色、蓝色和绿色。 当我点击红色按钮时,它将应用红色通道的过滤器。但是,当我继续单击蓝色按钮时,它将与红色重叠,图像变暗

是否有人知道,当单击蓝色通道时,如何“处置”红色通道,反之亦然,以便过滤器不会相互重叠?下面是我的代码片段

 private void redchannel_Click_1(object sender, EventArgs e)
    {
        try
        {

            pictureBox1.Image = pic;
            pictureBox2.Image = pic2;

            // create filter
            ChannelFiltering filter = new ChannelFiltering();
            // set channels' ranges to keep
            filter.Red = new IntRange(0, 255);
            filter.Green = new IntRange(255, 255);
            filter.Blue = new IntRange(255, 255);
            // apply the filter
            filter.ApplyInPlace(pic2);


        }


        catch (Exception)
        {
            throw new ApplicationException("Failed loading image");
        }
    }

    private void bluechannel_Click_1(object sender, EventArgs e)
    {
        try
        {
            pictureBox1.Image = pic;
            pictureBox2.Image = pic2;

            // create filter
            ChannelFiltering filter = new ChannelFiltering();
            // set channels' ranges to keep
            filter.Red = new IntRange(255, 255);
            filter.Green = new IntRange(255, 255);
            filter.Blue = new IntRange(0, 255);
            // apply the filter
            filter.ApplyInPlace(pic2);

        }




        catch (Exception)
        {
            throw new ApplicationException("Failed loading image");
        }
    }

    private void greenchannel_Click_1(object sender, EventArgs e)
    {
        try
        {
            pictureBox1.Image = pic;
            pictureBox2.Image = pic2;

            // create filter
            ChannelFiltering filter = new ChannelFiltering();
            // set channels' ranges to keep

            filter.Red = new IntRange(255, 255);
            filter.Green = new IntRange(0, 255);
            filter.Blue = new IntRange(255, 255);
            // apply the filter
            filter.ApplyInPlace(pic2);
        }
        catch (Exception)
        {
            throw new ApplicationException("Failed loading image");

        }
    }

您需要存储原始图像以及可能修改的显示图像。对原始数据执行计算,并将其与显示图像一起显示。切勿更改原始图像,仅更改显示图像。

您需要存储原始图像以及可能修改的显示图像。对原始数据执行计算,并将其与显示图像一起显示。切勿更改原始图像,仅更改显示图像。

我猜测您当前正在做的是将pic2初始化为原始pic的副本。然后继续向pic2添加过滤器。因此,所发生的是,你有一个干净的图像,然后应用第一个过滤器,第二个过滤器,依此类推

我会改变:

pictureBox1.Image = pic;
pictureBox2.Image = pic2;
为了

另一件事是,您可能希望将所有3个按钮指向同一个函数。目前您拥有的3个函数中有90%是代码重复。维修的噩梦

更好的解决办法是:
另一种方法是将每个按钮分开(3个btn点击函数),在这里您可以调用新的过滤函数,并使用红色、绿色和蓝色作为参数。

我的最佳猜测是,您当前正在做的是将pic2初始化为原始pic的副本。然后继续向pic2添加过滤器。因此,所发生的是,你有一个干净的图像,然后应用第一个过滤器,第二个过滤器,依此类推

我会改变:

pictureBox1.Image = pic;
pictureBox2.Image = pic2;
为了

另一件事是,您可能希望将所有3个按钮指向同一个函数。目前您拥有的3个函数中有90%是代码重复。维修的噩梦

更好的解决办法是:
另一种方法是将每个按钮分开(3个btn点击函数),在这里用红色、绿色和蓝色作为参数调用新的过滤函数。

代码分解是一件好事!代码分解是一件好事!是的,我正在我的程序中这样做。我有两个图片盒。pictureBox1是我的原始图像,我从中获取像素并在pictureBox2图像上设置像素。然后你不需要“删除”任何东西,我也不确定问题出在哪里。是的,我在我的程序中这样做。我有2个pictureBox。pictureBox1是我的原始图像,我从中获取像素并在pictureBox2图像上设置像素。然后你不需要“删除”我不知道问题出在哪里。