2011-11-21 16 views
6

如何直接從內存而不是硬盤在webBrowser控件中顯示圖像? 當我使用RAM磁盤軟件來創建虛擬驅動器時,可以通過尋址映像源來加載它,如下所示: img src =「Z:/image.jpg」Z表示RAM磁盤驅動器。是否有可能在.NET中以編程方式執行此操作?或使用MemoryStream來做到這一點?如何直接從內存中顯示webBrowser控件中的圖像?

我真的很感激這方面的一些建議。

+0

你可以試試這個http://stackoverflow.com/questions/290035/how-do-i-get-ac-sharp-webbrowser-control-to-show-jpeg-files-raw如果不行,你可以看看這個http://www.codeproject.com /KB/files/MhtBuilder.aspx並嘗試將圖像轉換爲.mhtml,然後顯示它。 – user629926

+1

目標是什麼,你爲什麼需要從RAM加載它?如果它的性能可以使用SSD。 –

+0

您使用哪種WebBrowser控件? WinForms之一,WPF之一,還是Silverlight之一? –

回答

1

您可以用base64編碼圖像。例如

<img src="data:image/gif;base64,MyImageDataEncodedInBase64=" alt="My Image data in base 64" /> 

這裏是你如何能做到這一點一個完整的例子:

using System; 
using System.IO; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace ImageEncodedInBase64InAWebBrowser 
{ 
    [ComVisible(true)] 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string url = Directory.GetCurrentDirectory() + "\\page.html"; 
      webBrowser1.Url = new Uri(url); 
      webBrowser1.ObjectForScripting = this; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string imageInBase64 = ReadImageInBase64(); 
      webBrowser1.Document.InvokeScript("setImageData", new[] { imageInBase64 }); 

     } 

     private string ReadImageInBase64() 
     { 
      string imagePath = Directory.GetCurrentDirectory() + "\\opensource.png"; 
      using (var fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read)) 
      { 
       var buffer = new byte[fs.Length]; 
       fs.Read(buffer, 0, (int)fs.Length); 
       return Convert.ToBase64String(buffer); 
      } 
     } 
    } 
} 

這Javascript代碼:

function setImageData(imageBase64) { 
    var myImg = document.getElementById("myImg"); 
    myImg.src = "data:image/png;base64," + imageBase64; 
} 
相關問題