2010-12-14 59 views
0

我使用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"); 

     } 
    } 
+1

代碼因式分解是一件好事! – 2010-12-14 07:47:41

+0

哈哈是贊同! – LouisL 2010-12-14 08:22:11

回答

2

您需要存儲原始圖像以及潛在修改的顯示圖像。對原稿進行計算並用顯示圖像顯示。切勿改變原稿,只改變顯示圖像。

+0

是的,我在我的程序中這樣做。我有2個pictureBox。 pictureBox1是我的原始圖像,我從中獲取像素,並在pictureBox2圖像上設置像素。 – LouisL 2010-12-14 08:12:45

+0

然後,你不需要「刪除」任何東西,我'[不知道是什麼問題。 – 2010-12-14 18:12:48

1

我最好的猜測是你現在正在做的是你初始化pic2作爲原始圖片的副本。然後你繼續添加過濾器到pic2。所以會發生什麼是你有乾淨的圖像,然後應用第一個過濾器,第二個過濾器等等。

我會改變:

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

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

的另一件事是,你可能會想點所有3個按鈕的功能相同。目前你所擁有的3個功能中有90%是代碼重複。維護的噩夢。

更好的解決方案是: 另一種方法是將每個按鈕分開(3 btn點擊功能),在那裏用紅色,綠色&藍色作爲參數調用新的過濾功能。