2013-05-07 58 views
0

轉換的圖像時出現「參數無效」錯誤當前我正在測試一個腳本,該腳本嘗試保存從HEX字符串轉換而來的圖像文件,但是,當我嘗試執行保存命令時,參數無效出現。嘗試保存從字節

 // Some junk hex image data 
     string hexImgData = @"FFD8FFE000104A46494600010200006400640000FFFFD9"; 

     // Call function to Convert the hex data to byte array 
     byte[] newByte = ToByteArray(hexImgData); 
     MemoryStream memStream = new MemoryStream(newByte); 

     // Save the memorystream to file 
     Bitmap.FromStream(memStream).Save("C:\\img.jpg"); 


    // Function converts hex data into byte array 
    public static byte[] ToByteArray(String HexString) 
    { 
     int NumberChars = HexString.Length; 

     byte[] bytes = new byte[NumberChars/2]; 

     for (int i = 0; i < NumberChars; i += 2) 
     { 
      bytes[i/2] = Convert.ToByte(HexString.Substring(i, 2), 16); 
     } 
     return bytes; 
    } 

目前我還在尋找是什麼原因造成的,請指教。

+1

您確定'hexImgData'有效的'BitMap'內容嗎? 我的意思是[語法和結構](http://en.wikipedia.org/wiki/JPEG) – 2013-05-07 03:07:53

回答

0

正如在評論中提到的,你的位圖格式是錯誤的,你只有一些隨機的十六進制數據和Bitmap.FromStream方法不知道該如何處理它。如果你看看這個link,它討論瞭如何用十六進制編輯器創建一個位圖文件,它討論了BitmapHeaderBitmapInfoHeaderPixel RGB Data。我能夠通過從他們的示例中獲取數據並使用它來使用您的代碼創建一個位圖。

string bitmapHeader = "424D860000000000000036000000"; 
string bitmapInfoHeader = "280000000500000005000000010018000000000050000000C40E0000C40E00000000000000000000"; 
string pixelData = "0000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF00"; 


string hexImgData = bitmapHeader + bitmapInfoHeader + pixelData; 

// Call function to Convert the hex data to byte array 
byte[] newByte = ToByteArray(hexImgData); 
MemoryStream memStream = new MemoryStream(newByte); 

pictureBox1.Image = Bitmap.FromStream(memStream); 
+1

嗯......似乎問題在於我的位圖格式......我用一些來自不同的十六進制字符串進行了測試圖像和它的作品.... thx! – Ytan 2013-05-07 05:37:49

0

看來你需要從Base64編碼轉換傳入的字符串字節數組是這樣的:

byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);