C#中获取图片宽高异常:Image.Width/Height始终为0的求助
解决Image.Width/Height返回0的问题
问题根源
BitmapImage默认是异步加载的,你刚设置完Source就去读取宽高,此时图片还没加载完成,所以返回初始值0。另外代码里重复创建了两次BitmapImage,属于没必要的冗余操作。
具体解决方法
方法1:强制同步加载
给BitmapImage设置CacheOption为BitmapCacheOption.OnLoad,让图片加载完成后再执行后续代码,这样就能直接拿到真实尺寸:
Uri imageUri = new Uri(FileListe[position]); BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = imageUri; bitmap.CacheOption = BitmapCacheOption.OnLoad; // 强制同步加载完成再往下走 bitmap.EndInit(); Image Bild = new Image(); Bild.Source = bitmap; // 直接用BitmapImage的像素尺寸更准确 Interface.Width = bitmap.PixelWidth; Interface.Height = bitmap.PixelHeight; brush.ImageSource = bitmap; Interface.Fill = brush;
方法2:监听加载完成事件(避免UI卡顿)
如果担心同步加载大图片卡住UI,可以监听Image的Loaded事件,在图片加载完成后再获取实际渲染尺寸:
Uri imageUri = new Uri(FileListe[position]); Image Bild = new Image(); BitmapImage bitmap = new BitmapImage(imageUri); Bild.Source = bitmap; // 图片加载完成后再调整尺寸 Bild.Loaded += (sender, e) => { // 用ActualWidth/ActualHeight获取控件渲染后的真实尺寸 Interface.Width = Bild.ActualWidth; Interface.Height = Bild.ActualHeight; }; brush.ImageSource = bitmap; Interface.Fill = brush;
你说启动时图片占满屏幕,是因为一开始Image和Interface都没设置宽高,默认会拉伸填充父容器,而初始获取宽高失败导致尺寸没被正确设置。
内容的提问来源于stack exchange,提问作者fblechinger
相关产品推荐
相关产品推荐

