2013-11-27 135 views
1

我想將字符串轉換爲位圖或我可以在pixelbox中顯示的東西。將字符串轉換爲位圖c#

我的字符串如下所示:

string rxstring = "010010010020020020030030030040040040050050050060060060070070070080080080090090090100100100110110110120120120130130130140140140150150150160160160「 

這是沒有問題的刪除字符串中的RGB代碼

("01002003004005060070080090100110120130140150160"); 

我只需要它來顯示的並不重要[原文]

IDE:VS2010 C#

+1

如何獲取圖像的字符串數據? –

+0

我通過我的Arduino串行COM端口讀取它 –

+0

這是一個Base64字符串嗎? –

回答

1

經連續審查,我意識到,你得到的字符串不一個字節ar射線。這將創建一個方形位圖,並讓您逐個像素地設置值。

List<string> splitBytes = new List<string>(); 
string byteString = ""; 
foreach (var chr in rsstring) 
     { 
      byteString += chr; 

      if (byteString.Length == 3) 
      { 
       splitBytes.Add(byteString); 
       byteString = ""; 
      } 
     } 

     var pixelCount = splitBytes.Count/3; 
     var numRows = pixelCount/4; 
     var numCols = pixelCount/4; 

     System.Drawing.Bitmap map = new System.Drawing.Bitmap(numRows, numCols); 

     var curPixel = 0; 
     for (int y = 0; y < numCols; y++) 
     { 
      for (int x = 0; x < numRows; x++) 
      { 
       map.SetPixel(x, y, System.Drawing.Color.FromArgb(
        Convert.ToInt32(splitBytes[curPixel * 3]), 
        Convert.ToInt32(splitBytes[curPixel * 3 + 1]), 
        Convert.ToInt32(splitBytes[curPixel * 3 + 2]))); 

       curPixel++; 
      } 
     } 
     //Do something with image 

編輯:對行/列迭代進行更正以匹配上面顯示的圖像。

+0

這裏假設你發送的圖像總是一個正方形,並且將它視爲這樣 –

+0

謝謝這段代碼在我的刺激中沒有任何錯誤 –

+0

請注意,圖像變得越大,越複雜,代碼執行的時間就越長。 –

1

嘗試串轉換爲一個字節數組,並加載到一個內存流。一旦進入流,你應該能夠轉換爲圖像。

List<byte> splitBytes = new List<byte>();    
string byteString = ""; 

foreach (var chr in testString) 
{ 
    byteString += chr; 

    if (byteString.Length == 3) 
    { 
     splitBytes.Add(Convert.ToByte(byteString)); 
     byteString = ""; 
    } 
} 

if (byteString != "") 
    splitBytes.AddRange(Encoding.ASCII.GetBytes(byteString)); 

using (var ms = new MemoryStream(splitBytes.ToArray())) 
{ 
    var img = System.Drawing.Image.FromStream(ms); 

    //do something with image. 
} 

編輯:添加更新的代碼。這是通過加載我自己的圖像並將字節轉換爲字符串,然後使用上述代碼將它們轉換回字節數組來測試的,並且我成功從字符串加載了圖像。

string testString = "255216255224000016074070073070000001001001000096000096000000255225000104069120105102000000077077000042000000000008000004001026000005000000000001000000000062001027000005000000000001000000000070001040000003000000000001000002000000001049000002000000000018000000000078000000000000000000000096000000000001000000000096000000000001080097105110116046078069084032118051046053046049049000255219000067000002001001002001001002002002002002002002002003005003003003003003006004004003005007006007007007006007007008009011009008008010008007007010013010010011012012012012007009014015013012014011012012012255219000067001002002002003003003006003003006012008007008012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012255192000017008000004000004003001034000002017001003017001255196000031000000001005001001001001001001000000000000000000000000001002003004005006007008009010011255196000181016000002001003003002004003005005004004000000001125001002003000004017005018033049065006019081097007034113020050129145161008035066177193021082209240036051098114130009010022023024025026037038039040041042052053054055056057058067068069070071072073074083084085086087088089090099100101102103104105106115116117118119120121122131132133134135136137138146147148149150151152153154162163164165166167168169170178179180181182183184185186194195196197198199200201202210211212213214215216217218225226227228229230231232233234241242243244245246247248249250255196000031001000003001001001001001001001001001000000000000000000001002003004005006007008009010011255196000181017000002001002004004003004007005004004000001002119000001002003017004005033049006018065081007097113019034050129008020066145161177193009035051082240021098114209010022036052225037241023024025026038039040041042053054055056057058067068069070071072073074083084085086087088089090099100101102103104105106115116117118119120121122130131132133134135136137138146147148149150151152153154162163164165166167168169170178179180181182183184185186194195196197198199200201202210211212213214215216217218226227228229230231232233234242243244245246247248249250255218000012003001000002017003017000063000252225248089251085248195193031007060033030133127054137107121166121143107103121116176043069052182202085076167111238224143056234193152252204073040162128063255217"; 

編輯:添加了用於測試上述代碼的圖像的示例字符串。

+0

這將工作,但仍然是用他的數據一個毫無意義的圖像。 – woutervs

+1

從我所知道的情況來看,將圖像字節數組轉換爲字符串是破壞數據的原因。理論上,上面的代碼應該可以工作,但是在測試時,字符串本身在轉換爲字節數組時不是Image類可以加載的有效字節數組。 –

+0

如果你的字符串是一個字節數組的有效表示,它應該加載。 –

8

恐怕你得到的數據不是一個有意義的圖像。如果你將數據分成三組。您會得到以下結果:

010 
010 
010 
020 
020 
020 
030 
030 
030 
040 
040 
040 
050 
050 
050 
060 
060 
060 
070 
070 
070 
080 
080 
080 
090 
090 
090 
100 
100 
100 
110 
110 
110 
120 
120 
120 
130 
130 
130 
140 
140 
140 
150 
150 
150 
160 
160 
160 

如果您查看該數據,則無法將其轉換爲實際上對我們意味着什麼的圖像。這將是一個48像素的集合。包含有點像圖像梯度的(因爲下面的數字遵循一個模式,是不斷增加的。

我們需要更多的信息來調試這一點。(像什麼組件提供數據等)

更新 這是我所得到的,當我將數據轉換爲像素(以帳戶我已經擴大每個像素16×16)

Result when assembling the data

+0

也將上面的字符串轉換爲文本給你: (((222 << woutervs

+0

它是一個4×4像素女巫希望灰色顯示在像素盒我知道你不會看到太多,但在一段時間會有更多的像素,然後我得到更好的熱氣球 –

+0

我已經更新了我的答案,數據結果的放大圖像應該小16倍,因此不可見肉眼看不到你確定你的arduino發送了正確的數據嗎 – woutervs