2013-10-01 62 views
0

我想在c#中製作黑白圖像。這裏是我的代碼:在C中製作黑白圖像#

public static void SetGrayscale(Bitmap b) 
    { 
     Bitmap temp = (Bitmap) b; 
     Bitmap bmap = (Bitmap)temp.Clone(); 
     Color c; 
     for (int i = 0; i < bmap.Width; i++) 
     { 
      for (int j = 0; j < bmap.Height; j++) 
      { 
       c = bmap.GetPixel(i, j); 
       byte gray = (byte)(.299 * c.R + .587 * c.G + .114 * c.B); 

       bmap.SetPixel(i, j, Color.FromArgb(gray, gray, gray)); 
      } 
     } 
     b = (Bitmap)bmap.Clone(); 
    }  

    static void Main(string[] args) 
    { 
     Bitmap bm = new Bitmap(Image.FromFile("D:\\users\\visual studio 2010\\Projects\\aaa\\20130924_144411.tif")); 
     byte[] pixels = ImageToByte(bm); 

     SetGrayscale(bm); 
    } 

問題是,它不會變成黑色和白色,它仍然是一樣的。我沒有保存更改的圖像?這裏有什麼問題?

謝謝

+1

位圖是一次性的,你真的需要圍繞很多這些使用'使用'塊。特別是當你使用GDI +的東西時,在垃圾收集器決定收集超出範圍的對象之前,很容易耗盡資源。另外'位圖溫度=(位圖)b;'和'b =(位圖)bmap.Clone();'都是不必要的。 –

回答

1

你是指磁盤上的文件沒有改變?你將不得不保存灰度位圖:bm.Save("D:\\bitmap.tif");

+2

他還需要返回修改的位圖,他在函數內部工作的副本是克隆副本,因此它不會修改原始副本。 –

+0

是的,現在它正在保存謝謝你 – yrazlik

+0

也需要約10秒,這是正常的,還是我需要一些優化? – yrazlik