Silverlight:获取图像(来自OpenFileDialog)的宽度/高度

时间:2009-02-05 13:18:35

标签: c# silverlight image

我一直在使用BitmapImage.DownloadProgress事件等到从URI创建位图时加载图像。那是我可以使用事件处理程序在下载完成后检查Image.ActualWidth / ActualHeight。这很好。

但是当我加载用户从他们的计算机中选择的图像时,DownloadProgress是没用的。

这适用于URI位图:

private void LoadImage(Uri uri)
{
    this.ResetProgressImage();
    BitmapImage image = new BitmapImage();            
    image.DownloadProgress += new EventHandler<DownloadProgressEventArgs>(LoadImageDownloadProgress);
    image.UriSource = uri;
    this.ImageFull.Source = image;
}

private void LoadImageDownloadProgress(object sender, DownloadProgressEventArgs e)
{
    this.Dispatcher.BeginInvoke(delegate
    {
        this.ProgressImage.Value = e.Progress;
        if (e.Progress == 100)
        {
            ImageHelper.Current.Width = Math.Round(this.ImageFull.ActualWidth);
            ImageHelper.Current.Height = Math.Round(this.ImageFull.ActualHeight);
        }
    });
}

但是从流中获取BitmapImage时这不起作用:

private void LoadImage(Stream stream)
{
    this.ResetProgressImage();
    BitmapImage image = new BitmapImage();            
    image.DownloadProgress += new EventHandler<DownloadProgressEventArgs>(LoadImageDownloadProgress);            
    image.SetSource(stream);
    this.ImageFull.Source = image;
}

使用SetSource(流)时,有没有人知道DownloadProgress的替代方法?

1 个答案:

答案 0 :(得分:2)

BitmapImage中没有事件可以使用流来监控加载进度。

但是,如果您只需要图像尺寸,则可以将图像添加到层次结构中并等待“已加载”或“布局更新”事件。