You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:10:19