.Net Core 无法使用位图

Posted

技术标签:

【中文标题】.Net Core 无法使用位图【英文标题】:.Net Core unable to use Bitmap 【发布时间】:2019-06-08 08:54:30 【问题描述】:

我正在使用 .Net Core 2.1 开发 Web 服务。

我有一个包含所有像素值(灰度)、宽度、高度的字节数组。我想根据这些参数创建一个位图。

有我的代码(来自工作中的 .Net Framework 4 项目):

public FileResult PostSealCryptItem(Byte[] matrix, int width, int height)

    Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
    for (int y = 0; y < height; y++)
        for (int x = 0; x < width; x++)
            bmp.SetPixel(x, y, Color.FromArgb(ToArgb(matrix, x, y)));

    Byte[] data = BitmapToByteArray(bmp);
    FileContentResult result = new FileContentResult(data , "image/png");

    return result;

但在 .NET Core 中,我遇到了错误:

找不到类型或命名空间名称“位图”(您是否缺少 using 指令或程序集引用?)

我尝试添加对 System.Drawing 的引用,但没有成功。

【问题讨论】:

.NET Core 中没有内置的图像处理,您需要使用第三方工具,但有一些不错的工具。例如我目前正在使用SkiaSharp。 How to use bitmap resources in ASP.NET Core app?的可能重复 这里有System.Drawing.Common @stuartd 缺点是我相信你只能在 Windows 上运行? @DavidG 看起来像,现在我看到它有 Microsoft.Win32.SystemEvents 作为依赖项 【参考方案1】:

安装 Nuget 包 System.Drawing.Common

.net core 不再包含它,必须手动添加。

【讨论】:

【参考方案2】:

有一个NuGet包代替System.Drawing,你可以使用它

Install-Package System.Drawing.Common

【讨论】:

【参考方案3】:

您可以使用 ImageSharp 代替 System.Drawing

https://github.com/SixLabors/ImageSharp

Nuget 控制台

Install-Package SixLabors.ImageSharp -Version 1.0.0-beta0005

【讨论】:

【参考方案4】:

Aspose.Drawing 是 System.Drawing 的跨平台替代品。该库是完全托管的,并支持使用 .Net Core 2.1 的 Web 服务。 (我是开发人员之一。)

【讨论】:

那是商业产品吗? @beppe9000 是的。【参考方案5】:

这个对我有用 dotnet add package System.Drawing.Common --version 5.0.3

【讨论】:

以上是关于.Net Core 无法使用位图的主要内容,如果未能解决你的问题,请参考以下文章

令牌无法存储在 .NET Core 中

无法在 .NET Core 中使用 WCF WebHttpBinding

无法使用 HTTPS 启动 ASP.NET Core

无法使用 EF Core 或 LinqToDb EF Core Tools 或 ADO.NET 运行任何存储过程创建脚本

无法使用 .NET Core 运行 xUnit 测试

无法使用 .NET Core 运行 xUnit 测试