webbrowser microsoft ejemplo control chrome c# .net webbrowser-control

microsoft - ¿Cómo obtengo un control C#WebBrowser para mostrar archivos jpeg(en bruto)?



webbrowser vba (6)

No puedes hacerlo. No puede guardar imágenes en el control del navegador web de Microsoft.

La limitación proviene del control IWebBrowser, que .NET finaliza.

¿Alguien sabe en .Net 2.0 - .Net 3.5 cómo cargar un jpeg en System.Windows.Forms.WebControl como una matriz de bytes y con los tipos de mimet correctos establecidos para que se muestren?

Algo como:

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

El webBrowser1.DocumentType parece ser de solo lectura, así que no sé cómo hacerlo. En general, quiero poder cargar cualquier clase de origen de archivos con un tipo mimetype definido en el navegador para mostrarlo.

Las soluciones con escritura de archivos temporales no son buenas. Actualmente lo he resuelto con un pequeño oyente de socket del servidor web local que me proporciona el jpeg que solicito con el tipo mimet correcto.

ACTUALIZACIÓN: desde que alguien eliminó una pregunta de respuesta personal donde tenía información que otros podrían usar, la agregaré como una actualización. (Para aquellos que eliminan de esa manera, actualice las preguntas con la información importante).

Solución de muestra en C # que funciona perfectamente: http://www.codeproject.com/KB/aspnet/AspxProtocol.aspx


Si quiere un truco total, intente que su flujo sea el archivo HTML que solo muestra su imagen. Perderá su transmisión de bytes de imagen y tendrá que escribir la imagen en el disco.


Debe implementar un protocolo conectable asíncrono, por ejemplo, IClassFactory, IInternetProtocol ... Luego, usa CoInternetGetSession para registrar su protocolo. Cuando IE llama a su implementación, puede servir sus datos de imagen desde la memoria / proporcionar tipo de mimo.

Es un poco tedioso, pero factible. Consulte IInternetProtocol y la documentación de protocolos conectables en MSDN .


No sé si el WebBrowser .NET admite esto, pero RFC2397 define cómo usar imágenes en línea. Usando esto y un fragmento de XHTML creado sobre la marcha, podría asignar la imagen sin la necesidad de escribirla en un archivo.

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

No tengo idea si esta solución es elegante, pero supongo que no. Mi excusa para no estar seguro es que es tarde por la noche. :)

Referencias


IE solo admite 32 KB para imágenes en línea en codificación base64, por lo que no es una buena solución.


Pruebe el protocolo res:

No lo he probado con .NET dll, pero esta publicación dice que debería funcionar. Incluso si requiere un dll de C ++, es mucho más simple de usar en lo que respecta a la codificación.

He creado una publicación que le muestra cómo aquí le muestra cómo crear el script de recursos y usar el protocolo res: correctamente.