JPEG 파일 (RAW)을 표시하기 위해 C# WebBrowser 컨트롤을 얻으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/290035

  •  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 만 지원하므로 좋은 솔루션은 아닙니다.

시도해보십시오 res: 규약.

.NET DLL로 시도하지는 않았지만 시도하지 않았습니다 이것 포스트는 작동해야한다고 말합니다. C ++ DLL이 필요하더라도 코딩이 진행되는 한 사용하는 것이 훨씬 간단합니다.

나는 당신에게 방법을 보여주는 게시물을 만들었습니다 여기 리소스 스크립트를 작성하고 사용하는 방법을 보여줍니다. RES : 프로토콜이 올바르게.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top