2009-08-03 8 views
1

Ich verwende das WebBrowser-Steuerelement in C# in an application, um HTML anzuzeigen. Alle Daten stammen aus einer Datenbank, also erstelle ich eine ganze Seite mit Inline-CSS im Speicher und sende sie an den Browser.Anzeigen eines Bilds in einem WebBrowser-Steuerelement ohne Zugriff auf externe Dateien

Aber jetzt möchte ich Bilder unterstützen, was ein Problem zu sein scheint, weil ich die Bilder nicht auf Festplatte speichern möchte, nicht einmal in einem Temp Directory. Ich bin mir der data: URI Scheme bewusst, aber das scheint zu begrenzt zu sein.

Ich frage mich: Kann ich irgendwie JavaScript verwenden, um dynamisch ein Bild zu generieren, gegeben einen Strom von Bytes, im Wesentlichen spiegeln die Daten: Schema mit JavaScript? Oder gibt es eine andere Möglichkeit, Bilder anzuzeigen, d. H. Mit GDI +?

Ich kann bei Bedarf einige Annahmen über die Bilder machen, d. H. Ich kann den Benutzer zwingen, die Breite und Höhe anzugeben, aber ich kann die Position nicht wirklich erzwingen, es ist schließlich HTML. Ich kann auch zwingen, dass alle Bilder in einem bestimmten Format vorliegen, im Grunde alles, was dazu beitragen könnte, dies zu lösen.

Edit: Könnte ich vielleicht etwas wie VML missbrauchen, um Bitmap-Daten anzuzeigen? Ich kann Canvas oder SVG nicht verwenden, wie es scheint (beide in IE und daher in MSHTML nicht unterstützt?)

Bearbeiten 2: VML würde funktionieren, aber die Prozessorlast ist verrückt. Also werde ich entweder einen Webserver implementieren, um Dateien (wie Cassini) zu liefern oder versuche die Silverlight approach in meiner anderen Frage.

Antwort

2

Wenn Sie bereit sind, Ihrer Anwendung eine zusätzliche Ebene der Komplexität hinzuzufügen, können Sie einen einfachen Webserver einbetten, der für die Bereitstellung der Bilder verwendet werden kann. Mit der System.Net.HttpListener können Sie Ihre Anwendung einrichten, um die Bilder wie gewünscht zu liefern. Dies sollte funktionieren, aber es scheint schrecklich hackish ...

+0

hmmm ... That Ist eigentlich nicht so viel von einem Hack. Das einzige mögliche Problem ist eine Firewall beschwert sich über meine Anwendung auf einem Port zu hören, aber es könnte auf 127.0.0.1: unused_port verbinden und die Bilder dienen. Denken Sie darüber nach, das ist eine saubere Lösung. –

2

Das img-Tag unterstützt Inline-Daten in seinem Quellenattribut. So können Sie Ihre Bilddaten aufnehmen, Base64-encodieren und im src-Attribut speichern.

Look here for an example. und Sie können googlen für html embed image für weitere Beispiele.

+0

Das Problem mit dem Daten: Schema ist, dass es nicht von älteren Internet Explorer-Versionen unterstützt wird und dass es auf 32k in neueren beschränkt ist :-( –

Verwandte Themen