2008-11-14 93 views
3

有没有人知道.Net 2.0 - .net 3.5如何将jpeg加载到System.Windows.Forms.WebControl中作为字节数组,并且设置了正确的mimetypes以便显示?如何获取C#WebBrowser控件以显示jpeg文件(原始)?

喜欢的东西:

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

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

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

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

样品溶液完美的作品:http://www.codeproject.com/KB/aspnet/AspxProtocol.aspx

回答

5

你要实现一个异步可插入协议,如IClassFactory,IInternetProtocol ...然后你使用CoInternetGetSession来注册你的协议。当IE调用您的实现时,您可以从内存中提供图像数据/提供MIME类型。

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

0

你不能做到这一点。您不能将图像填充到Microsoft的Web浏览器控件中。

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

0

如果您想要彻底破解,请尝试让您的流成为仅显示您的图片的HTML文件。你失去了你的图像字节流,将不得不将图像写入磁盘。

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

不知道这种解决方案是否优雅,但我想它不是。我不确定的借口是深夜。 :)

参考文献:

+0

我相信IE以前不支持数据:图片的东西。 – liggett78 2008-11-15 20:29:20

0

对于base64编码的内联图像,IE只支持32KB,所以不是一个好的解决方案。

0

试试res:协议。

我还没有用.net dll试过它,但this帖子说它应该工作。即使它确实需要一个C++ dll,但编码的使用要简单得多。

我创建了一篇文章,向您展示如何here向您展示如何正确创建资源脚本并使用res:协议。

相关问题