2012-12-13 64 views
0

我在使用JPG圖像類型,此行image = Image.FromStream(ms);給出錯誤Parameter is not valid。 這段代碼有什麼問題?Image.FromStream()在圖像處理時發出C#

 private void button3_Click(object sender, EventArgs e) 
     { 
      Image partial=null; 
      Rectangle bounds; 
      Guid id; 

      if (diff != null) 
      { 
      ImageConverter converter = new ImageConverter(); 
      var data = (byte[])converter.ConvertTo(diff, typeof(byte[])); 

      UnpackScreenCaptureData(data, out partial, out bounds,out id); 
      Image imgfirst = (Image)firstImg; 
      UpdateScreen(ref imgfirst, partial, bounds); 
      } 
     } 

     public static void UnpackScreenCaptureData(byte[] data, out Image image, out Rectangle bounds, out Guid id) 
     { 
      // Unpack the data that is transferred over the wire. 
      // Create byte arrays to hold the unpacked parts. 
      const int numBytesInInt = sizeof(int); 
      int idLength = Guid.NewGuid().ToByteArray().Length; 
      int imgLength = data.Length - 4 * numBytesInInt - idLength; 
      byte[] topPosData = new byte[numBytesInInt]; 
      byte[] botPosData = new byte[numBytesInInt]; 
      byte[] leftPosData = new byte[numBytesInInt]; 
      byte[] rightPosData = new byte[numBytesInInt]; 
      byte[] imgData = new byte[imgLength]; 
      byte[] idData = new byte[idLength]; 

      // Fill the byte arrays. 
      Array.Copy(data, 0, topPosData, 0, numBytesInInt); 
      Array.Copy(data, numBytesInInt, botPosData, 0, numBytesInInt); 
      Array.Copy(data, 2 * numBytesInInt, leftPosData, 0, numBytesInInt); 
      Array.Copy(data, 3 * numBytesInInt, rightPosData, 0, numBytesInInt); 
      Array.Copy(data, 4 * numBytesInInt, imgData, 0, imgLength); 
      Array.Copy(data, 4 * numBytesInInt + imgLength, idData, 0, idLength); 

      // Create the bitmap from the byte array.   
      MemoryStream ms = new MemoryStream(imgData, 0, imgData.Length); 
      ms.Write(imgData, 0, imgData.Length); 
      image = Image.FromStream(ms); 
      .... 
     } 
+0

什麼是異常被拋出? –

+0

當這一行「image = Image.FromStream(ms);」執行然後我得到錯誤和錯誤消息是「參數無效」。 – Thomas

+0

我覺得有一個很小的錯誤,我無法理解。 – Thomas

回答

1

我認爲你必須重置MemoryStream定位0 您可以通過調用Seek()方法對內存流實現這一點:

MemoryStream ms = new MemoryStream(imgData, 0, imgData.Length); 
ms.Write(imgData, 0, imgData.Length); 

ms.Seek(0, SeekOrigin.Begin); // Set stream position to 0.  

image = Image.FromStream(ms); 
+1

此外,這沒有任何意義:'MemoryStream ms = new MemoryStream(imgData,0,imgData.Length); ms.Write(imgData,0,imgData.Length);'從數組創建流,然後寫入該數組再次流? – Anri

+0

仍然得到了錯誤....使用此ms.Seek(0,SeekOrigin.Begin)後; – Thomas

+0

@Thomas:您是否將imgLength,topPosData,...與原始值進行了比較?我想我們確實需要更多的代碼才能幫助你。 – Hans