如何获取图片尺寸并将其赋值给变量?
获取图片尺寸并赋值给变量的正确实现
我来帮你搞定这个问题!你的代码里有几个关键细节没处理对,导致可能拿不到正确的图片尺寸,甚至触发异常。下面给你梳理问题并给出修正后的代码:
你的代码存在的问题
- 初始化顺序错误:
BitmapImage的BeginInit()和EndInit()必须包裹住属性设置(比如UriSource),否则初始化流程不完整,无法正确读取图片元数据。 - 未处理取消选择的情况:如果用户点击了文件对话框的取消按钮,
OpenFile.FileName是空字符串,这时候创建Uri会直接报错。 - 没有性能优化(可选):如果只是要获取图片尺寸,没必要加载完整的图片到内存,白白浪费资源。
修正后的完整代码
// 创建并配置文件选择对话框 var openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image Files (*.bmp;*.png;*.jpg)|*.bmp;*.png;*.jpg"; // 确认用户选择了文件 if (openFileDialog.ShowDialog() == true) { string imagePath = openFileDialog.FileName; BitmapImage bitmapImage = new BitmapImage(); // 严格按照BeginInit -> 设置属性 -> EndInit的流程初始化 bitmapImage.BeginInit(); bitmapImage.UriSource = new Uri(imagePath); // 【性能优化可选】如果只需要尺寸,不用加载全图,加上这两行 // bitmapImage.CacheOption = BitmapCacheOption.OnLoad; // bitmapImage.DecodePixelWidth = 1; // 随便设个小尺寸,不影响获取原始宽高 bitmapImage.EndInit(); // 现在可以安全地获取图片尺寸并赋值给变量 double windowWidth = bitmapImage.Width; double windowHeight = bitmapImage.Height; // 这里可以添加你后续使用这两个变量的逻辑,比如设置窗口大小 // this.Width = windowWidth; // this.Height = windowHeight; } else { // 用户取消了文件选择,这里可以添加提示或其他处理逻辑 // MessageBox.Show("未选择任何图片"); }
关键细节说明
- 初始化流程:
BitmapImage是WPF的Freezable类型对象,必须通过BeginInit()和EndInit()来完成属性的批量设置,确保对象状态一致。 - 异常防护:先判断
ShowDialog()的返回值,只有用户确实选择了文件才继续执行,避免空路径引发的UriFormatException。 - 性能优化:开启
CacheOption.OnLoad并设置DecodePixelWidth后,系统只会读取图片的元数据(包括尺寸),不会加载完整像素数据,内存占用会大幅降低,尤其适合处理大尺寸图片。
内容的提问来源于stack exchange,提问作者user8731365
相关产品推荐
相关产品推荐

