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

.NET Framework项目移植.NET Core 2.0遇BitmapImage类问题求助

解决.NET Core 2.0中BitmapImage缺失的问题

我之前帮不少开发者处理过.NET Framework到.NET Core的移植问题,你遇到的BitmapImage困境确实挺典型的——毕竟.NET Core 2.0本身就没包含WPF相关的PresentationCore组件,也没有直接对应的NuGet包。给你几个可行的解决方案,你可以根据项目实际情况选择:

方案1:使用官方的System.Drawing.Common NuGet包

这是微软为.NET Core提供的替代传统System.Drawing的库,虽然不是WPF的BitmapImage,但能满足绝大多数图像加载、处理的需求。

  • 第一步先安装NuGet包:在包管理器控制台执行 Install-Package System.Drawing.Common,或者在Visual Studio的NuGet管理器里搜索安装。
  • 示例代码:
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

// 加载本地图像文件
using (var bitmap = new Bitmap("example.jpg"))
{
    // 示例:将图像缩放到200x200
    var resizedBitmap = new Bitmap(bitmap, new Size(200, 200));
    resizedBitmap.Save("resized_example.jpg", ImageFormat.Jpeg);
    
    // 如果需要将图像转换为流供其他组件使用
    using (var stream = new MemoryStream())
    {
        bitmap.Save(stream, ImageFormat.Png);
        stream.Position = 0;
        // 这里可以把stream传递给需要图像数据的模块
    }
}

注意:这个库在Windows平台表现完美,但在Linux或macOS上部署时,需要额外安装libgdiplus依赖包。

方案2:升级到更高版本的.NET Core/.NET

.NET Core 2.0是比较老旧的版本(早已停止官方支持),微软从.NET Core 3.0开始正式引入了WPF框架支持。升级后你可以直接复用原来的BitmapImage代码,几乎不需要修改:

  • 把项目的目标框架升级到.NET Core 3.0/3.1(或者更推荐的.NET 5+ LTS版本,比如.NET 6/8)
  • 升级完成后,直接引用PresentationCore程序集,使用System.Windows.Media.Imaging.BitmapImage,和原代码完全兼容:
using System.Windows.Media.Imaging;
using System;

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri("example.jpg", UriKind.Relative);
bitmapImage.EndInit();

// 后续可以像原来一样使用bitmapImage对象

这应该是最省心的方案,不仅解决了BitmapImage的问题,还能让项目获得更高的性能、更多特性和安全补丁。

方案3:使用跨平台第三方图像处理库(ImageSharp)

如果你需要纯跨平台支持,且不想依赖系统级的图像库,SixLabors.ImageSharp是个非常优秀的选择——它是完全托管的跨平台图像处理库,无需额外依赖:

  • 安装NuGet包:执行 Install-Package SixLabors.ImageSharp
  • 示例代码:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Processing;
using System.IO;

// 加载图像并进行处理
using (var image = Image.Load("example.jpg"))
{
    // 示例:缩放图像并设置高质量保存
    image.Mutate(x => x.Resize(200, 200));
    image.Save("resized_example.jpg", new JpegEncoder { Quality = 90 });
    
    // 转换为流供其他使用
    using (var stream = new MemoryStream())
    {
        image.Save(stream, new PngEncoder());
        stream.Position = 0;
        // 这里可以使用stream传递图像数据
    }
}

这个库的API设计简洁友好,完全跨平台,适合现代.NET项目的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:34