System.Drawing.Common DrawString在Linux中无法正确呈现文本

时间:2019-10-28 03:18:55

标签: c# .net linux ubuntu system.drawing.common

因此,我不确定问题是什么,并且几乎已经想到了每个选项。我的目标是Ubuntu 18.04 LTS上的dotnet core 3.0。在Windows环境中,它可以正常工作,但是在Ubuntu环境中,文本只是无法呈现其支持方式,而看起来像这样

应该如何显示

How it is supposed to be displayed

它在Ubuntu上的显示方式

How it is displaying on Ubuntu

我正在使用Arial字体,并且安装了MS TrueType字体软件包,我已经尝试了Ubuntu固有的字体系列,并且还是一样。

1 个答案:

答案 0 :(得分:1)

我在 Fedora 34 上遇到了同样的问题。

我使用这个示例文件来重现问题:

using System.Drawing;

Bitmap bmp = new Bitmap(200, 100);
using var gfx = Graphics.FromImage(bmp);
gfx.Clear(Color.Navy);
Font fnt = new Font("Arial", 18);
gfx.DrawString("test123", fnt, Brushes.Yellow, 10, 10);
bmp.Save("test.bmp");

(请注意,上面的代码使用 .NET 5 和 C# 9.0 编译和运行,因为它支持顶级语句 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/top-level-statements。)

然而,结果是这样的:

enter image description here

我为解决这个问题所做的是运行以下终端命令:

$ dotnet add package system.drawing.common

在那之后,重新构建并运行程序会产生这个图像:

enter image description here

通过此更改,我的 .csproj 文件现在如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="system.drawing.common" Version="5.0.2" />
  </ItemGroup>

</Project>

仅供参考;我偶然发现这个问题的原因是当我尝试使用 ScottPlot 时,我提交了关于它的错误:https://github.com/ScottPlot/ScottPlot/issues/1079