有谁知道在 .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 来显示它。

写入临时文件的解决方案并不是很好的解决方案。目前,我已经通过一个小的本地网络服务器套接字侦听器解决了这个问题,该侦听器可以提供我要求的具有正确 mimetype 的 jpeg。

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

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

有帮助吗?

解决方案

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

这有点乏味,但可行。请参阅 MSDN 上的IInternetProtocol和可插入协议文档。

其他提示

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

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

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

我不知道是否 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";
}

不知道这个解决方案是否优雅,但我想它不是。我不确定的借口是现在已经是深夜了。:)

参考:

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

尝试res:协议。

我没有尝试使用.net dll但这个帖子说它应该有效。即使它确实需要一个C ++ DLL,它的编写也会更加简单。

我创建了一个帖子,向您展示此处如何显示如何创建资源脚本并使用 res:协议正确。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top