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

WPF项目中无法正确使用System.Drawing.Image.FromFile的问题求助

解决WPF中Image类命名空间冲突及图像转换问题

一、先排查System.Drawing引用问题

你直接指定System.Drawing.Image或用别名无效,大概率是WPF项目默认没引用System.Drawing.Common NuGet包:

  • 打开NuGet包管理器,搜索并安装System.Drawing.Common(注意:.NET 6+在非Windows平台有兼容性限制,仅在Windows运行可忽略此限制)
  • 安装后重新编译代码,直接使用System.Drawing.Image _tmpimg = System.Drawing.Image.FromFile(_recpage.FileLocation);就能正常识别,不会和System.Windows.Controls.Image混淆。

如果仍有问题,检查代码文件顶部的using语句,确保没有把System.Drawing.Image用using别名覆盖,或存在变量名与Image重名的情况。

二、WPF原生替代方案(推荐)

WPF自带独立的图像处理API,无需依赖System.Drawing,更适配WPF环境,以下是改写后的JPEG/BMP转TIFF代码:

else if ((_recpage.FileType == FileType.ImageFile) && (_recpage.ImageType == ImageFileType.JPEG || _recpage.ImageType == ImageFileType.BMP))
{
    // 用WPF原生API读取图像并保存为TIFF
    using (FileStream sourceStream = new FileStream(_recpage.FileLocation, FileMode.Open, FileAccess.Read))
    {
        BitmapDecoder decoder = BitmapDecoder.Create(sourceStream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
        TiffBitmapEncoder encoder = new TiffBitmapEncoder();
        
        // 将源图像帧添加到TIFF编码器
        foreach (BitmapFrame frame in decoder.Frames)
        {
            encoder.Frames.Add(frame);
        }
        
        // 保存到目标文件
        using (FileStream targetStream = new FileStream(_imgfile, FileMode.Create, FileAccess.Write))
        {
            encoder.Save(targetStream);
        }
    }
    _totalpages++;
}

需确保代码文件顶部引用System.Windows.Media.Imaging命名空间,该命名空间为WPF自带,无需额外安装包。

这种方式彻底避免了命名空间冲突,也更符合WPF的设计理念。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:12:44