2014-09-26 196 views
2

第一次使用C#在這裏工作。我正在讀幾個圖像文件,做一些計算,並輸出和雙數組。我需要能夠保存這個雙數組(或這些,因爲我將有多個數組),以灰度圖像。我在互聯網上四處尋找,我找不到太多東西。我已經在Python和Mathlab上完成了它,但是C#似乎並不像我那麼友好。這是我迄今爲止所做的(用於雙重圖像創作)。C#將2D雙精度數組轉換爲灰度圖像

 static Image MakeImage(double[,] data) 
    { 
     Image img = new Bitmap(data.GetUpperBound(1), data.GetUpperBound(0)); 
     //Bitmap bitmap = new Bitmap(data.GetUpperBound(1), data.GetUpperBound(0)); 
     for (int i = 0; i < data.GetUpperBound(1); i++) 
     { 
      for (int k = 0; k < data.GetUpperBound(0); k++) 
      { 
       //bitmap.SetPixel(k, i, Color.FromArgb((int)data[i, k],(int) data[i, k],(int) data[i, k])); 
      } 
     } 

     return img; 
    } 
} 

}

這段代碼實際上沒有做多少。它創建我的空白圖像模板。顏色不需要雙重作爲輸入。我不知道如何從數據創建圖像...我卡住=)

謝謝你提前。

+0

[轉換圖像灰度(可能重複http://stackoverflow.com/questions/2265910/convert-an-圖像到灰度) – 2014-09-26 20:37:48

+0

您的代碼沒問題,數據的內容是什麼? – brz 2014-09-26 20:58:13

+0

嗨,代碼目前只創建一個新的位圖圖像。我的問題是,我希望能夠獲取某個DOUBLE [,]數據並將其製作爲圖像。例如:[[1.1,2.5],[4.2,3.3]] - >裏面有這些數據的圖片(位圖圖像​​)。 (現在,它創建一個空白圖像,並且註釋部分創建一個INTEGER圖像)。 – IHaveSumQuestions 2014-09-27 20:50:28

回答

2

如果你能接受使用不安全塊,這是相當快的:

private Image CreateImage(double[,] data) 
    { 
     double min = data.Min(); 
     double max = data.Max(); 
     double range = max - min; 
     byte v; 

     Bitmap bm = new Bitmap(data.GetLength(0), data.GetLength(1)); 
     BitmapData bd = bm.LockBits(new Rectangle(0, 0, bm.Width, bm.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); 

     // This is much faster than calling Bitmap.SetPixel() for each pixel. 
     unsafe 
     { 
      byte* ptr = (byte*)bd.Scan0; 
      for (int j = 0; j < bd.Height; j++) 
      { 
       for (int i = 0; i < bd.Width; i++) 
       { 
        v = (byte)(255 * (data[i, bd.Height - 1 - j] - min)/range); 
        ptr[0] = v; 
        ptr[1] = v; 
        ptr[2] = v; 
        ptr[3] = (byte)255; 
        ptr += 4; 
       } 
       ptr += (bd.Stride - (bd.Width * 4)); 
      } 
     } 

     bm.UnlockBits(bd); 
     return bm; 

    }