2011-11-21 12 views
6

Come posso visualizzare un'immagine nel controllo webBrowser direttamente dalla memoria anziché dal disco rigido? Quando utilizzo il software RAM Disk per creare un'unità virtuale, è possibile indirizzare un'origine immagine per caricarla in questo modo: img src = "Z: /image.jpg" che Z è un'unità disco RAM. È possibile farlo in .NET programmaticamente? o usare MemoryStream per farlo?Come posso visualizzare un'immagine nel controllo webBrowser direttamente dalla memoria?

Vorrei davvero qualche suggerimento su questo.

+0

si potrebbe provare questo http://stackoverflow.com/questions/290035/how-do-i-get-ac-sharp-webbrowser-control-to-show-jpeg-files-raw e se ciò non funziona si potrebbe vedere questo http://www.codeproject.com /KB/files/MhtBuilder.aspx e prova a convertire l'immagine in .mhtml, quindi mostrala. – user629926

+1

qual è l'obiettivo, perché è necessario caricarlo dalla RAM? Se si tratta di prestazioni, è sufficiente utilizzare un SSD. –

+0

Quale controllo WebBrowser stai usando? Quello di WinForms, quello di WPF o quello di Silverlight? –

risposta

1

È possibile codificare l'immagine in base64. Per esempio

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

Ecco un esempio completo di come si può raggiungere questo obiettivo:

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); 
      } 
     } 
    } 
} 

E questo codice Javascript:

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