2009-11-13 69 views
1

如果我有一个Silverlight Image控件从完整的URL下载,我如何获得下载图像的大小(以字节为单位),而无需进行其他Web通话?在Silverlight中获取下载图像的大小

我找不到任何关于ImageBitmapImage背后的来源,会告诉我。而且即使上的DownloadProgress事件也只会给出一个百分比。

回答

0

我以前从没注意到了这一点,但是这是一种在框架中一个奇怪的差距...

你可能有单独使用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; 
    } 

显然,如果你已经有你的窗体上的图像控件,你不会需要创建一个新的,或者如果你确实想创建它,你”将不得不将其添加到某种类的父面板...

〜克里斯

+0

你一定是对的。我希望它只是藏在某个地方,但我想这只是没有暴露。 – RandomEngy 2009-11-16 17:00:37

+0

试图做到这一点,但是当我尝试从另一个域中获取图像时,出现安全异常。我认为图像控件有特殊的权限来进行这种网络通话。 – RandomEngy 2009-11-22 19:24:23

+0

天哪,现在我想到了,我从来没有用过WebClient在Silverlight容器中进行跨站点调用之前... Here's some info about that Exception。有一个XML配置文件,您可以在客户端上设置,但这可能无济于事。 正如他所建议的,您应该能够编写一个简单的服务或ASP页面,您可以调用这个页面,只需获取图像位并将它们写入响应即可。然后打电话给自己的网页。 – 2009-11-25 05:06:53