JPEG 파일 (RAW)을 표시하기 위해 C# WebBrowser 컨트롤을 얻으려면 어떻게해야합니까?
-
08-07-2019 - |
문제
.NET 2.0 -.NET 3.5에서 jpeg를 시스템 .windows.forms.webControl로 바이트 어레이로로드하고 올바른 모방 유형을 설정하여 표시하는 방법을 알고 있습니까?
같은 것 :
webBrowser1.DocumentStream = new MemoryStream(File.ReadAllBytes("mypic.jpg"));
webBrowser1.DocumentType = "application/jpeg";
WebBrowser1.documentType는 읽는 것처럼 보이 므로이 작업을 수행하는 방법을 모릅니다. 일반적으로 브라우저에 정의 된 MimeType을 사용하여 모든 종류의 FilesSource를로드하여 표시 할 수 있기를 원합니다.
온도 파일을 작성하는 솔루션은 좋은 것이 아닙니다. 현재 나는 올바른 모방 유형으로 요구하는 JPEG를 제공하는 작은 로컬 웹 서버 소켓 리스너를 사용하여 해결했습니다.
업데이트 : 누군가가 다른 사람들이 사용할 수있는 정보가있는 답변 질문을 삭제 했으므로 대신 업데이트로 추가하겠습니다. (그런 식으로 삭제하는 사람들에게 중요한 정보로 질문을 업데이트하십시오).
C#의 샘플 솔루션은 완벽하게 작동합니다. http://www.codeproject.com/kb/aspnet/aspxprotocol.aspx
해결책
IclassFactory, IinternetProtocol, 예를 들어 Async Pluggable 프로토콜을 구현해야합니다. 그런 다음 CointernetGetSession을 사용하여 프로토콜을 등록합니다. IE가 구현을 호출하면 메모리/MIME 유형 제공에서 이미지 데이터를 제공 할 수 있습니다.
약간 지루하지만 가능합니다. IinternetProtocol 및 플러그 가능한 프로토콜 문서를보십시오 MSDN.
다른 팁
넌 못해. 이미지를 Microsoft의 웹 브라우저 컨트롤에 넣을 수는 없습니다.
제한은 iwebbrowser 컨트롤 자체에서 발생하며 .NET이 마무리됩니다.
총 해킹을 원한다면 스트림을 사진 만 표시하는 HTML 파일로 해보십시오. 이미지 바이트 스트림을 잃고 이미지를 디스크에 작성해야합니다.
나는인지 여부를 모른다 WebBrowser
.NET Control은 이것을 지원하지만 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는 Base64 인코딩에서 인라인 이미지에 대해 32KB 만 지원하므로 좋은 솔루션은 아닙니다.