Frage

Kennt jemand in .Net 2.0 - .Net 3.5, wie ein JPEG in eine System.Windows.Forms.WebControl laden als Byte-Array und mit dem richtigen MIME-Typ gesetzt, so wird es zeigen

So etwas wie:

webBrowser1.DocumentStream = new MemoryStream(File.ReadAllBytes("mypic.jpg"));
webBrowser1.DocumentType = "application/jpeg";

Die webBrowser1.DocumentType scheint nur zu lesen, so dass ich weiß nicht, wie dies zu tun. Im Allgemeinen möchte ich jede Art von filesource zu laden, um der Lage sein, mit einem MIME-Typ in den Browser definiert, es zu zeigen.

Lösungen mit dem Schreiben von temporären Dateien sind nicht gute. Zur Zeit habe ich es mit mit einem kleinen lokalen Webserver Socket-Listener gelöst, die das JPEG ich mit dem richtigen MIME-Typ fragen liefert.

UPDATE: Da jemand eine Antwort-my-own Frage gelöscht, wo ich Informationen hatte, die andere benutzen konnten, werde ich es als Update hinzufügen, statt. (Für diejenigen, die auf diese Weise löschen Sie bitte die Fragen mit den wichtigen Informationen aktualisieren).

Probenlösung in C # hier, die perfekt funktioniert: http: //www.codeproject. com / KB / aspnet / AspxProtocol.aspx

War es hilfreich?

Lösung

Sie haben ein Asynchron-austauschbares Protokoll zu implementieren, z.B. IClassFactory, IInternetProtocol ... Dann nutzen Sie CoInternetGetSession Ihr Protokoll zu registrieren. Wenn IE Ihre Implementierung ruft, können Sie Ihre Bilddaten aus dem Speicher dienen / MIME-Typ liefern.

Es ist ein bisschen langweilig, aber machbar. Schauen Sie sich IInternetProtocol und steckbare Protokolle Dokumentation auf MSDN .

Andere Tipps

Sie können es nicht tun. Sie können keine Bilder in Microsofts Steuer Web-Browser stopfen.

Die Begrenzung kommt von der IWebBrowser Steuerung selbst, die .NET einpackt.

Wenn Sie eine Gesamt Hack wollen, versuchen Sie Ihren Stream die HTML-Datei sein, die die nur Ihr Bild zeigt. Sie verlieren Ihr Bild Bytestrom und wird das Bild auf die Festplatte schreiben.

Ich weiß nicht, ob die WebBrowser NET-Steuerung dies unterstützt, aber RFC2397 definiert, wie Inline-Bilder verwenden. Mit diesem und einem XHTML-Schnipsel on-the-fly erstellt, könnten Sie möglicherweise das Bild zuweisen, ohne dass sie in eine Datei zu schreiben.

Image someImage = Image.FromFile("mypic.jpg");

// Firstly, get the image as a base64 encoded string
ImageConverter imageConverter = new ImageConverter();
byte[] buffer = (byte[])imageConverter.ConvertTo(someImage, typeof(byte[]));
string base64 = Convert.ToBase64String(buffer, Base64FormattingOptions.InsertLineBreaks);

// Then, dynamically create some XHTML for this (as this is just a sample, minimalistic XHTML :D)
string html = "<img src=\"data:image/" . someImage.RawFormat.ToString() . ";base64, " . $base64 . "\">";

// And put it into some stream
using (StreamWriter streamWriter = new StreamWriter(new MemoryStream()))
{
    streamWriter.Write(html);
    streamWriter.Flush();
    webBrowser.DocumentStream = streamWriter.BaseStream;
    webBrowser.DocumentType = "text/html";
}

Keine Ahnung, ob diese Lösung elegant ist, aber ich denke, es ist nicht. Meine Entschuldigung dafür, nicht sicher zu sein, ist, dass es spät in der Nacht ist. :)

Referenzen:

nur IE 32KB für Inline-Bilder in Base64-Codierung unterstützen, so dass nicht eine gute Lösung.

Versuchen Sie, das res: Protokoll.

Ich habe es nicht mit einer .net DLL versucht, aber diese Post sagt, es sollte funktionieren. Auch wenn es eine C ++ erfordert es dll ist viel einfacher, so weit zu verwenden, wie Codierung geht.

Ich habe einen Beitrag erstellt, die Ihnen zeigen, wie hier , dass zeigt, wie die Ressource-Skript erstellen und verwenden, die res: Protokoll korrekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top