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