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

如何获取图片尺寸并将其赋值给变量?

获取图片尺寸并赋值给变量的正确实现

我来帮你搞定这个问题!你的代码里有几个关键细节没处理对,导致可能拿不到正确的图片尺寸,甚至触发异常。下面给你梳理问题并给出修正后的代码:

你的代码存在的问题

  • 初始化顺序错误: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("未选择任何图片");
}

关键细节说明

  1. 初始化流程:BitmapImage是WPF的Freezable类型对象,必须通过BeginInit()和EndInit()来完成属性的批量设置,确保对象状态一致。
  2. 异常防护:先判断ShowDialog()的返回值,只有用户确实选择了文件才继续执行,避免空路径引发的UriFormatException。
  3. 性能优化:开启CacheOption.OnLoad并设置DecodePixelWidth后,系统只会读取图片的元数据(包括尺寸),不会加载完整像素数据,内存占用会大幅降低,尤其适合处理大尺寸图片。

内容的提问来源于stack exchange,提问作者user8731365

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:02:52