有没有人知道.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来显示它。
编写临时文件的解决方案并不好。目前我已经通过一个小的本地webserver套接字监听器解决了这个问题,该监听器使用正确的mimetype提供了我要求的jpeg。
更新:由于有人删除了我自己的答案问题,其中我有其他人可以使用的信息,我会将其添加为更新。 (对于那些删除该方式的人,请使用重要信息更新问题)。
C#中的示例解决方案完美无缺:http://www.codeproject.com/KB/aspnet/AspxProtocol.aspx
答案 0 :(得分:5)
您必须实现异步可插拔协议,例如IClassFactory,IInternetProtocol ...然后使用CoInternetGetSession注册您的协议。当IE调用您的实现时,您可以从内存提供图像数据/提供mime类型。
这有点乏味,但可行。查看MSDN上的IInternetProtocol和可插拔协议文档。
答案 1 :(得分:0)
你不能这样做。您无法将图像填充到Microsoft的Web浏览器控件中。
限制来自IWebBrowser控件本身,.NET包装。
答案 2 :(得分:0)
如果您想要彻底破解,请尝试将您的信息流设为仅显示您的图片的HTML文件。丢失了图像字节流,必须将图像写入磁盘。
答案 3 :(得分: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";
}
不知道这个解决方案是否优雅,但我想不是。我不能确定的借口是深夜。 :)
参考文献:
答案 4 :(得分:0)
IE仅支持32KB用于base64编码的内嵌图像,因此不是一个好的解决方案。
答案 5 :(得分:0)