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
相关产品推荐
相关产品推荐

