2012-03-03 3 views
2

xml 파일 판독기에서 런타임에 이미지 URL을받습니다. 이 이미지 URL은 아래 방법으로 전달되어 동적으로 다운로드됩니다.Windows8 메트로 앱에서 이미지를 동적으로 다운로드하고 표시하는 방법

public void Display_Image(string MyURL) 
    { 
      BitmapImage bi = new BitmapImage(); 
      bi.UriSource = new Uri(this.BaseUri, MyURL); 
      Img_Poster.Source = bi; 
    } 

그러나 이것은 작동하지 않습니다. 나는 어떤 이미지 소스도 얻지 못한다. 위의 코드는 컴파일 타임에 제공되는 정적 URL로 잘 동작합니다. 더 많은 것을하기 위해 무엇이 필요합니까?

+0

WinRT 워드 프로세서 지금 매우 부적절하다. 하지만 50 밀리 초 이상 걸릴 수있는 모든 것은 비동기 적으로 수행되어야한다는 것을 명심하십시오. ImageOpened 이벤트에서 벗어나는 것을 확인하십시오. ImageFailed를 잊지 마세요. –

+0

Casn에서 런타임시 파일을받는 방법에 대해 좀 더 자세히 설명합니다. FilePicker를 통해서입니까? 정적 콘텐츠를 의미하는 경우이 콘텐츠가 애플리케이션의 일부입니까? –

답변

4

아래 제안 된 방법은 더 이상 사용되지 않습니다. 그러나 런타임시 결정된 Uri로 동적으로 생성 된 새 비트 맵 이미지 만들기 IS는 Windows 8의 RTM 빌드에서 지원되고 작업합니다. Display_Image (url)은 예상대로 작동해야합니다.


당신은 CreateFromUri 도우미 사용하여 이미지 스트림을 얻을 수 있습니다 : http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.streams.streamreference.createfromuri.aspx#Y0

var stream = RandomAccessStreamReference.CreateFromUri(new Uri(imageUrl)) 

당신은 다음 도우미

2

I를 반환하는 RandomAccessStream에 비트 맵의 ​​소스를 설정 할 수 있어야한다을 이전에 작동했던 비트 맵 코드가 Windows RT에서 작동하지 않는 것과 비슷한 문제가 있었지만 초기 시도는 UI에 표시되지 않으면 아무 것도 다운로드하지 않는다는 것을 확신합니다 (여기서는 할당하기 전에 1ms 지연을 삽입해야했습니다. 에스 ources 그냥) 이미지 다운로드를 실행하는 데 얻을 :

var image = .... // reference to animage on the UI 
var placeholder = ... // a placeholder BitmapImage 
var source = ... // uri to download 

image.Source = placeholder; 
var src = new BitmapImage(new Uri(source)); 
src.ImageOpened += (s, e) => 
{ 
    var bi = s as BitmapImage; 
    image.Source = bi; 
}; 

image.Source = src; 
// Delay required to trigger download 
await Task.Delay(1); 
image.Source = placeholder; 

가 여기에 내가 성공을 해봤 또 다른 해결책 :

var image = .... // reference to animage on the UI 
var source = ... // uri to download 
var placeholder = ... // a placeholder BitmapImage 

image.Source = placeholder; 

var bytes = await new HttpClient().GetByteArrayAsync(source); 
var img = new BitmapImage(); 
await img.SetSourceAsync(bytes.AsBuffer().AsStream().AsRandomAccessStream()); 
image.Source = img; 
+0

매우 짧고 달콤한 솔루션 _ (# 2) _. 기본 인증으로 보안이 설정된 사이트에서 이미지를 다운로드해야했습니다. _HttpClient_ 접근 방식을 사용하면 헤더를 사용하여 사이트를 잠금 해제 할 수 있었고 ** VOILA! **. 고마워, 안토니. – iSofia

관련 문제