4

.Net 2.0 - .Net 3.5 で jpeg を System.Windows.Forms.WebControl にバイト配列としてロードし、適切な MIME タイプを設定して表示する方法を知っている人はいますか?

何かのようなもの:

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

webBrowser1.DocumentType は読み取り専用のようで、これを行う方法がわかりません。一般に、ブラウザに定義された mimetype を使用して、あらゆる種類のファイルソースをロードして表示できるようにしたいと考えています。

一時ファイルを書き込むソリューションは適切ではありません。現在、必要な jpeg を適切な MIME タイプで配信する小さなローカル Web サーバー ソケット リスナーを用意することで解決しました。

更新: 誰かが、他の人が使用できる情報を持っていた自分の回答の質問を削除したため、代わりに更新として追加します。(そのように削除する人は、質問を重要な情報で更新してください)。

完全に機能する C# のサンプル ソリューション: http://www.codeproject.com/KB/aspnet/AspxProtocol.aspx

4

6 に答える 6

5

IClassFactory、IInternetProtocol などの非同期のプラグ可能なプロトコルを実装する必要があります。次に、CoInternetGetSession を使用してプロトコルを登録します。IE が実装を呼び出すと、メモリから画像データを提供したり、MIME タイプを提供したりできます。

少し面倒ですが、実行可能です。MSDNの IInternetProtocol およびプラグ可能なプロトコルのドキュメントを参照してください。

于 2008-11-15T20:31:08.183 に答える
0

WebBrowser.NETコントロールがこれをサポートしているかどうかはわかりませんが、 RFC2397はインラインイメージの使用方法を定義しています。これとオンザフライで作成されたXHTMLスニペットを使用すると、ファイルに書き込むことなく画像を割り当てることができます。

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

このソリューションがエレガントかどうかはわかりませんが、そうではないと思います。よくわからないのは、夜遅くだということです。:)

参照:

于 2008-11-15T00:12:40.407 に答える
0

res:プロトコルを 試してください。

.net dll で試したことはありませんが、この投稿では動作するはずです。C++ dll が必要な場合でも、コーディングに関してははるかに簡単に使用できます。

リソース スクリプトを作成し、res:プロトコルを正しく 使用する方法を示す投稿を作成しました。

于 2013-03-28T01:16:18.440 に答える
0

あなたはそれをすることはできません。Microsoft の Web ブラウザ コントロールに画像を詰め込むことはできません。

この制限は、.NET がラップする IWebBrowser コントロール自体に起因します。

于 2008-11-14T18:45:03.483 に答える
0

完全なハックが必要な場合は、ストリームを画像のみを表示する HTML ファイルにしてみてください。イメージ バイト ストリームが失われ、イメージをディスクに書き込む必要があります。

于 2008-11-14T22:27:19.027 に答える