2011-11-21 31 views
6

¿Cómo puedo mostrar una imagen en el control webBrowser directamente desde la memoria en lugar del disco duro? Cuando uso el software RAM Disk para crear una unidad virtual, es posible direccionar una fuente de imagen para cargarla así: img src = "Z: /image.jpg" que Z es una unidad de disco RAM. ¿Es posible hacer eso en .NET programáticamente? o usa MemoryStream para hacer eso?¿Cómo puedo mostrar una imagen en el control webBrowser directamente desde la memoria?

Realmente agradecería algunas sugerencias al respecto.

+0

Usted podría intentar esto http://stackoverflow.com/questions/290035/how-do-i-get-ac-sharp-webbrowser-control-to-show-jpeg-files-raw y si eso no funciona, podría ver esto http://www.codeproject.com /KB/files/MhtBuilder.aspx e intenta convertir tu imagen a .mhtml y luego muéstrala. – user629926

+1

cual es el objetivo, ¿por qué necesitas cargarlo desde la RAM? Si se trata de rendimiento, puede usar un SSD. –

+0

¿Qué control WebBrowser estás usando? ¿El de WinForms, el de WPF o el de Silverlight? –

Respuesta

1

Puede codificar la imagen en base64. Por ejemplo

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

Aquí es un ejemplo completo de cómo se puede lograr esto:

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

Y este código Javascript:

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