1
如果我有一個Silverlight Image
控件從完整的URL下載,我如何獲得下載圖像的大小(以字節爲單位),而無需進行其他Web通話?在Silverlight中獲取下載圖像的大小
我找不到任何關於Image
或BitmapImage
背後的來源,會告訴我。而且即使上的DownloadProgress
事件也只會給出一個百分比。
如果我有一個Silverlight Image
控件從完整的URL下載,我如何獲得下載圖像的大小(以字節爲單位),而無需進行其他Web通話?在Silverlight中獲取下載圖像的大小
我找不到任何關於Image
或BitmapImage
背後的來源,會告訴我。而且即使上的DownloadProgress
事件也只會給出一個百分比。
我以前從沒注意到了這一點,但是這是一種在框架中一個奇怪的差距...
你可能有單獨使用WebClient的對象來下載圖像。這會給你一個字節流。您可以檢查流的長度,然後從流中創建一個位圖。
代碼來設置Web客戶端,並開始下載(注意,這是一個異步調用,所以我們指定一個事件處理程序,當它完成下載解僱。)
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
Uri someImageUri = new Uri("http://www.somesite.com/someimage.jpg");
wc.OpenReadAsync(someImageUri);
這裏有一個例子是什麼事件處理方法可能是:
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
System.IO.Stream imageStream = e.Result;
long imageSize = imageStream.Length;
BitmapImage bi = new BitmapImage();
bi.SetSource(imageStream);
Image image = new Image();
image.Source = bi;
}
顯然,如果你已經有你的窗體上的圖像控件,你不會需要創建一個新的,或者如果你確實想創建它,你」將不得不將其添加到某種類的父面板...
〜克里斯
你一定是對的。我希望它只是藏在某個地方,但我想這只是沒有暴露。 – RandomEngy 2009-11-16 17:00:37
試圖做到這一點,但是當我嘗試從另一個域中獲取圖像時,出現安全異常。我認爲圖像控件有特殊的權限來進行這種網絡通話。 – RandomEngy 2009-11-22 19:24:23
天哪,現在我想到了,我從來沒有用過WebClient在Silverlight容器中進行跨站點調用之前... Here's some info about that Exception。有一個XML配置文件,您可以在客戶端上設置,但這可能無濟於事。 正如他所建議的,您應該能夠編寫一個簡單的服務或ASP頁面,您可以調用這個頁面,只需獲取圖像位並將它們寫入響應即可。然後打電話給自己的網頁。 – 2009-11-25 05:06:53