2016-04-19 47 views
1

目的:使用此代碼轉換圖像控制到字節數組Asp.Net

File.WriteAllBytes(Server.MapPath(imgPath), imageData); 

的imageData -Save asp.net圖像控制到文件夾服務器 中是假設在字節數組。

現在我已經googline很多關於如何將Asp.net圖像控制轉換爲字節數組,仍然沒有找到任何解決方案。 以上的例子都顯示瞭如何從UploadFile控件中保存,而不是從圖像控件本身保存。

我發現的唯一最接近的事情是這樣的

public static Byte[] ImageToByteArray(Image img) 
{ 
    try 
    { 
     MemoryStream mstImage = new MemoryStream(); 
     img.Save(mstImage, System.Drawing.Imaging.ImageFormat.Jpeg); 
     Byte[] bytImage = mstImage.GetBuffer(); 
     return bytImage; 
    } 
    catch (Exception ex) 
    { 

    } 
} 

但是,什麼是正確的參數我應該通過?我嘗試傳遞Image1.ImageUrl,但它返回一個錯誤。

任何幫助,非常感謝。

+0

該方法需要一個'Image',所以通過'Image1' ......但這些要求沒什麼意義。實際上,每次運行上面的代碼時,JPEG文物都會增加,因爲您不必要地再次壓縮已從磁盤讀取的圖像。 Image控件中顯示的文件來自哪裏,爲什麼不直接指向該文件?爲什麼你想把整個文件作爲一個字節數組存儲在內存中? – CodeCaster

回答

0

如果你已經有一個現成Image控制,看起來是這樣的:

<form id="form1" runat="server"> 
    <asp:Image ID="ExampleImageControl" runat="server" ImageUrl="~/Images/YourImage.jpg" /> 
</form> 

您可以創建一個能夠接受你的圖像控制的方法,讀取的字節數,並返回他們通過File.ReadAllBytes()方法預期您剛纔所說:

public byte[] ImageControlToByteArray(Image image) 
{ 
     try 
     { 
      // Attempt to find the Image that the control points to 
      // and read all of it's bytes 
      return File.ReadAllBytes(Server.MapPath(image.ImageUrl)); 
     } 
     catch (Exception ex) 
     { 
      // Uh oh, there was a problem reading the file 
      return new byte[0]; 
     } 
} 

然後你可以檢索預期字節:

var imagebytes = ImageControlToByteArray(YourImageControl); 
+0

圖像控件最初沒有ImageUrl。從網絡攝像頭捕獲後附加圖像。在我的ButtonClick方法中,它不會識別此方法ImageControlToByteArray。突出顯示該方法將告訴我生成方法存根。 –

+0

如果發佈實際圖像數據(例如,以便您可以通過服務器端代碼訪問它),那麼您只需確保在圖像填充之後才能調用此圖像數據。否則,這聽起來像你會使用一些基於Javascript的庫來填充你的圖像(從你的網絡攝像頭),那麼這可能是一個完全不同的問題。 –

+0

是的,從網絡攝像頭捕獲後,圖像將被填充。這部分沒有問題。現在圖像已填充,我想將其保存到服務器中的文件夾。使用這行代碼File.WriteAllBytes(Server.MapPath(imgPath),imageData); –