Wie kann ich ein Bild in einem WebBrowser-Steuerelement direkt aus dem Speicher anzeigen?

  • Wie kann ich ein Image im WebBrowser-Steuerelement direkt aus dem Speicher statt von der Festplatte anzeigen? Wenn ich mit der RAM Disk-Software ein virtuelles Laufwerk erstellt, kann eine Image-Quelle angesprochen werden Laden Sie es wie folgt: img src = "Z: /image.jpg", dass Z ein RAM-Laufwerk ist. Kann man das in .NET programmgesteuert machen? oder verwenden Sie MemoryStream, um dies zu tun?

    Ich würde mich über einige Vorschläge dazu wirklich freuen.

    22 November 2011
    svick
1 answer
  • Sie können das Bild in base64 kodieren. Beispiel:

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

    Hier ist ein vollständiges Beispiel, wie Sie dies erreichen können:

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

    Und dieser Javascript-Code:

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