如何获取C#中图片的高度和宽度

问题描述:

我想从网站获取图片的高度和宽度,但它总是返回0,因为图片还没有下载,所以我使用了下面的代码,仍然没有工作的图像将仅启动方法结束后下载,所以它挂如何获取C#中图片的高度和宽度

someMethod 
    {  
    foreach(string imagepath in paths){ 
    IsDownloaded = false; 
    image = new BitmapImage(new Uri(imagepath)); 
    image.ImageOpened += image_ImageOpened; 
    while (!IsDownloaded) ; 
    /// code that will use image.PixelHeight only if it satisfy a condition then break 
    } 

    private void image_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     IsDownloaded = true; 
    } 

没有人有任何替代或Metro风格的应用程序支持这方面的任何修复

+0

有一种方法如何获取文件信息的信息。看看http://msdn.microsoft.com/en-us/library/6yk7a1b0.aspx –

+0

只是一个警告,如果由于任何原因,任何图像无法下载您的代码将无限期旋转'while(!IsDownloaded)' 。更好地把你的代码放在'ImageOpened'处理程序中,只有当图像被下载和解码成功时才会触发。 – paul

您不能使用异步编程像这样 - 删除此行:

while (!IsDownloaded) ; 

并把它放在image_ImageOpened方法中。 我们通常将此称为“链接”,当您有一堆异步方法时,必须在每个方法完成后继续处理。

从我自己越来越宽/高的代码示例:

 BitmapImage imageSource = new BitmapImage(); 
     private void getImage() 
     { 
      Uri uir= new Uri("PATH", UriKind.Absolute); 
      imageSource.ImageOpened += new EventHandler<RoutedEventArgs>(imageopenened); 
     } 

     void imageopened(object sender, RoutedEventArgs e) 
     { 
      HEIGHT = ImageSource.PixelHeight; 
      WIDTH = ImageSource.PixelWidth; 
     ... 
     } 
+0

如果我使用了事件处理程序,我怎么能传递参数给它?因为生病需要改变原始方法中存在的一些属性 – EsoHasInsomnia

+0

@EsoHasInsomnia你需要改变什么? EventArgs对象可能包含你需要的东西,否则如果需要通过不同的方法修改某些对象的成员,那么你可以创建某些对象的成员 – Erix

+0

我有一个字符串数组,我必须在循环之前访问它,并且我有另一个字符串,我必须修改,我有它的参考传递给我在它的方法 – EsoHasInsomnia