2014-01-13 64 views
2

我需要從UriSrouce創建一個BitmaImage並打印它(在WPF應用程序中)。使用下面的代碼我能打印的圖像:如何使用BitmapImage設置UriSource與遠程服務器?

Image imgVoucher = new Image(); 
BitmapImage bImgVoucher = new BitmapImage(); 

bImgVoucher.BeginInit(); 
bImgVoucher.UriSource = new Uri(@"C:\logo-1.png", UriKind.Absolute); // Print ok 
bImgVoucher.EndInit(); 
imgVoucher.Source = bImgVoucher; 

相同的代碼和相同的圖像,但與UriSource指向Web服務器,圖像不打印,並不會引發錯誤。任何想法我做錯了什麼?

Image imgVoucher = new Image(); 
BitmapImage bImgVoucher = new BitmapImage(); 

bImgVoucher.BeginInit(); 
bImgVoucher.UriSource = new Uri("http://123123.com/logo.png", UriKind.Absolute); // Does not print 
bImgVoucher.EndInit(); 
imgVoucher.Source = bImgVoucher; 
+0

我可以在我的瀏覽器中加載圖片 – GibboK

回答

5

圖片可能未完全下載。在打印前,檢查IsDownloding屬性,如果需要添加一個DownloadCompleted事件處理程序:

var bitmap = new BitmapImage(new Uri("http://123123.com/logo.png")); 

if (!bitmap.IsDownloading) 
{ 
    // print immediately 
} 
else 
{ 
    bitmap.DownloadCompleted += (o, e) => 
    { 
     // print when download completed 
    }; 
} 

的替代(同步)的解決方案是創建一個BitmapImage的,例如之前下載完整的圖像數據像這樣:

var buffer = new WebClient().DownloadData("http://123123.com/logo.png"); 
var bitmap = new BitmapImage(); 

using (var stream = new MemoryStream(buffer)) 
{ 
    bitmap.BeginInit(); 
    bitmap.CacheOption = BitmapCacheOption.OnLoad; 
    bitmap.StreamSource = stream; 
    bitmap.EndInit(); 
} 

// print now 
+0

可能是一個解決方案設置同步下載?感謝您的回答 – GibboK