c# - System.Drawing.Common DrawString 无法在 Linux 中正确呈现文本
问题描述
所以我不确定问题是什么,并且已经用尽了我能想到的所有选择。我的目标是 Ubuntu 18.04 LTS 上的 dotnet core 3.0。在 Windows 环境中,它工作正常,但在这个 Ubuntu 环境中,文本并没有呈现它所支持的方式,并且看起来像这样
它应该如何显示
它在 Ubuntu 上的显示方式
我正在使用 Arial 字体,并且安装了 MS TrueType 字体包,我已经尝试过 Ubuntu 原生的字体系列,但还是一样。
解决方案
我在 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-水平陈述。)
但是,结果如下所示:
我为解决这个问题所做的是运行以下终端命令:
$ dotnet add package system.drawing.common
之后,重新构建并运行程序会生成此图像:
通过此更改,我的.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
推荐阅读
- powerbi - 带有日期切片器的 Distinctcount 条目
- r - 如何将中值()值合并到 R 中的表()函数中
- validation - 使用带有对象规则的自定义本地化验证消息
- python - 在第二个字符出现后拆分字符串
- swift - Linux 中的 Swift 5.1 控制台应用程序:键盘箭头向上/向下行为
- r - 预测时间内的生存(累积风险)
- botframework - Task module in Tabs Bot framework
- html - Excel VBA中的Excel到json文件
- mysql - 关闭 sql db 连接的正确方法是什么?
- graphviz - GraphViz - 如何将子图呈现为具有固定比率的 ascii?