Удалить фильтр на изображении - PullRequest
0 голосов
/ 14 декабря 2010

Я использую AForge.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");

        }
    }

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

Вам необходимо сохранить исходное изображение, а также потенциально измененное изображение дисплея.Выполните ваши расчеты на оригинале и покажите их с отображением изображения.Никогда не изменяйте оригинал, только отображаемое изображение.

1 голос
/ 29 ноября 2012

Мое лучшее предположение - то, что вы в настоящее время делаете, это то, что вы инициализируете pic2 как копию исходного изображения.Затем вы продолжаете добавлять фильтры в pic2.Так что получается, что у вас чистое изображение, затем примените 1-й фильтр, 2-й фильтр и т. Д.

Я бы изменил:

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

для

pictureBox1.Image = pic;
pictureBox2.Image = pic.clone();

Другое дело, что вы можете указать все 3 кнопки на одну и ту же функцию.90% из имеющихся у вас трех функций - это повторение кода.Кошмар для техобслуживания.

Еще более удачным решением было бы: еще один способ сделать это - сохранить каждую кнопку отдельно (3 функции нажатия кнопки), где вы вызываете свою новую функцию фильтрации с помощью Red, Green & Blue какпараметры.

...