Удалить фильтр на изображении
Я использую 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 ответа
Вам необходимо сохранить исходное изображение, а также потенциально измененное изображение дисплея. Выполните ваши расчеты на оригинале и покажите их с отображением изображения. Никогда не изменяйте оригинал, только изображение на дисплее.
Мое лучшее предположение - то, что вы сейчас делаете, это то, что вы инициализируете pic2 как копию исходного изображения. Затем вы продолжаете добавлять фильтры в pic2. Так что получается, что у вас есть чистое изображение, затем примените 1-й фильтр, 2-й фильтр и так далее.
Я бы поменял:
pictureBox1.Image = pic;
pictureBox2.Image = pic2;
за
pictureBox1.Image = pic;
pictureBox2.Image = pic.clone();
Другое дело, что вы можете указать все 3 кнопки на одну и ту же функцию. 90% из имеющихся у вас трех функций - это повторение кода. Кошмар для обслуживания.
Еще лучшим решением было бы: Другой способ сделать это - сохранить каждую кнопку отдельно (3 функции нажатия кнопки), где вы вызываете новую функцию фильтрации с параметрами Red, Green & Blue.