2011-01-13 4 views
1

내 앱이 시작될 때 많은 이미지를 미리로드하고 싶습니다. WPF 다운로드 이미지 바이트 BLOB 저장소에서

나는 BLOB 저장소와 클라우드에 저장 그 이미지의 URL을

I 클라우드에서 이미지 바이트를 다운로드 할

, 저장 (이 주소는 HTTPS 주소 BTW입니다)가 포함 된 Image 클래스가 이미지를 표시 할 시간이되면 해당 바이트에서 이미지를로드하십시오.

나는이 모든 코드를 가지고,하지만 난 예외가 계속 :

이 작업을 완료하는 데 적합한 없음 이미징 구성 요소가 발견되었다.

public BitmapImage ImageFromBuffer(Byte[] bytes) 
    { 
     MemoryStream stream = new MemoryStream(bytes); 
     stream.Seek(0, SeekOrigin.Begin); 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.StreamSource = stream; 
     image.EndInit(); 
     return image; 
    } 

그러나 에 : 나는이 전화 화면의 이미지를 얻을 할 때

//Loaded on start-up 
    private static void LoadImageBytes(Image img) 
    { 
     var urlUri = new Uri(img.Url); 
     var request = (HttpWebRequest)WebRequest.CreateDefault(urlUri); 
     MemoryStream memStream = new MemoryStream(); 

     using (var response = request.GetResponse()) 
     { 
      var buffer = new byte[4096]; 
      using (var stream = response.GetResponseStream()) 
      { 
       int bytesRead = stream.Read(buffer, 0, buffer.Length); 
       while (bytesRead > 0) 
       { 
        memStream.Write(buffer, 0, bytesRead); 
        bytesRead = stream.Read(buffer, 0, buffer.Length); 
       } 

       img.ImageBytes = memStream.ToArray(); 
      } 
     } 
    } 

후 FIX으로 업데이트 편집 : 여기

내 코드입니다 EndInit() 호출 예외가 발생합니다.

필자는 테스트를 해봤지만 로컬 파일 시스템에서 파일을로드하면 클라우드의 이미지와 다른 바이트 세트를 얻게됩니다. 나는 BLOB 저장소 나 https와 관련 있다고 생각하니?

예, 이미지를 탐색 할 수 있으며 손상되지 않습니다.

편집, 지금은 모두 좋은

답변

0

는이 라인이 올바른지 확신 고정?

while (stream.Read(buffer, 0, buffer.Length) > 0) 
       img.ImageBytes = buffer; 

img.ImageBytes는 마지막 읽기 버퍼를 보유합니다.

+0

잘 모르겠다. – Mark

+0

그것은 틀렸어, 나는 편집을 추가했다. – Mark

관련 문제