Pergunta

Alguém sabe em .Net 2.0 -? Net 3.5 como carregar um jpeg em um System.Windows.Forms.WebControl como um byte-array e com as mimetypes conjunto certo que ele irá mostrar

Algo como:

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

O webBrowser1.DocumentType parece apenas ser lido, então eu não sei como fazer isso. Em geral, eu quero ser capaz de carregar qualquer tipo de filesource com um tipo MIME definido no navegador para mostrá-lo.

Soluções com escrevendo arquivos temporários não são bons. Atualmente eu ter resolvido isso com ter um pouco de servidor web local, tomada ouvinte que oferece a jpeg peço com o mimetype direita.

UPDATE: Desde que alguém excluiu uma pergunta de resposta-meu-próprio onde eu tinha informações de que outros poderiam usar, eu vou adicioná-lo como uma atualização em seu lugar. (Para aqueles que excluir dessa maneira, atualize as perguntas com a informação importante).

solução da amostra em C # aqui que funciona perfeitamente: http: //www.codeproject. com / KB / aspnet / AspxProtocol.aspx

Foi útil?

Solução

Você tem que implementar um protocolo conectável assíncrona, por exemplo, IClassFactory, IInternetProtocol ... Então você usa CoInternetGetSession para registrar o seu protocolo. Quando IE chama sua implementação, você pode servir os dados de imagem da memória / fornecer tipo mime.

É uma tediosa pouco, mas factível. Olhe para IInternetProtocol e protocolos conectável documentação sobre MSDN .

Outras dicas

Você não pode fazê-lo. Você não pode imagens material para controle de web-browser da Microsoft.

A limitação vem do próprio controle IWebBrowser, que .NET embrulha-se.

Se você quer um corte total, a tentar ter o seu fluxo de ser o arquivo HTML que só mostra a sua imagem. Você perde o seu fluxo de imagem byte e terá de gravar a imagem para o disco.

Eu não sei se o controle WebBrowser .NET suporta isso, mas RFC2397 define como usar imagens inline. Usando este e um XHTML trecho criado on-the-fly, você poderia atribuir a imagem sem a necessidade de gravá-lo em um arquivo.

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

Não faço ideia se essa solução é elegante, mas eu acho que não é. Minha desculpa para não ter certeza é que é tarde da noite. :)

Referências:

IE suportam apenas 32KB para imagens embutidas em base64 que codificam, por isso não é uma boa solução.

Tente o protocolo res:.

Eu não tentei isso com um .net dll mas este post diz ele deve funcionar. Mesmo que isso exige um C ++ dll é muito mais simples de usar, tanto quanto de codificação vai.

Eu criei um post que você mostrar como aqui que mostra como criar o script de recurso e usar o res: protocolo corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top