如何获取C#WebBrowser控件来显示jpeg文件(原始)?

有没有人知道.Net 2.0 – .Net 3.5如何将一个jpeg作为字节数组加载到System.Windows.Forms.WebControl中,并设置正确的mimetypes以便显示?

就像是:

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

webBrowser1.DocumentType似乎是只读的,所以我不知道如何做到这一点。 一般来说,我希望能够加载任何类型的文件源,并在浏览器中定义mimetype来显示它。

编写临时文件的解决方案并不好。 目前我已经解决了它有一个小的本地Web服务器套接字监听器,它提供了我要求的jpeg与正确的mimetype。

更新:由于有人删除了我自己回答的问题,其中我有其他人可以使用的信息,我会将其添加为更新。 (对于那些删除这种方式的人,请用重要信息更新问题)。

C#中的示例解决方案完美运行: http : //www.codeproject.com/KB/aspnet/AspxProtocol.aspx

您必须实现异步可插入协议,例如IClassFactory,IInternetProtocol ……然后使用CoInternetGetSession注册您的协议。 当IE调用您的实现时,您可以从内存提供图像数据/提供mime类型。

这有点乏味,但可行。 查看MSDN上的IInternetProtocol和可插拔协议文档。

你做不了。 您无法将图像填充到Microsoft的Web浏览器控件中。

限制来自IWebBrowser控件本身,.NET包装。

如果您想要完全破解,请尝试将您的信息流设为仅显示您的图片的HTML文件。 您丢失了图像字节流,必须将图像写入磁盘。

我不知道WebBrowser .NET控件是否支持此function,但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 = ""; // 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"; } 

不知道这个解决方案是否优雅,但我想不是。 我不能确定的借口是深夜。 🙂

参考文献:

  • RFC2397
  • 图像到base64编码的字符串

IE仅支持32KB用于base64编码的内嵌图像,因此不是一个好的解决方案。

试试res:协议。

我没有用.net dll尝试过,但这篇文章说它应该可行。 即使它确实需要一个C ++ DLL,但就编码而言它的使用要简单得多。

我已经创建了一个post,向您展示如何在这里向您展示如何创建资源脚本并正确使用res: protocol。