如何获取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风格的应用程序支持这方面的任何修复
您不能使用异步编程像这样 - 删除此行:
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;
...
}
如果我使用了事件处理程序,我怎么能传递参数给它?因为生病需要改变原始方法中存在的一些属性 – EsoHasInsomnia
@EsoHasInsomnia你需要改变什么? EventArgs对象可能包含你需要的东西,否则如果需要通过不同的方法修改某些对象的成员,那么你可以创建某些对象的成员 – Erix
我有一个字符串数组,我必须在循环之前访问它,并且我有另一个字符串,我必须修改,我有它的参考传递给我在它的方法 – EsoHasInsomnia
有一种方法如何获取文件信息的信息。看看http://msdn.microsoft.com/en-us/library/6yk7a1b0.aspx –
只是一个警告,如果由于任何原因,任何图像无法下载您的代码将无限期旋转'while(!IsDownloaded)' 。更好地把你的代码放在'ImageOpened'处理程序中,只有当图像被下载和解码成功时才会触发。 – paul