在c#中绘制旋转的文本

Draw rotated text in c#

我在 chart.js 中有一个雷达图,我想在其中绘制旋转的标签。正如我在文档中看到的那样,这是不可能的,所以我尝试自己使用 C# 中的基本绘图来完成。这是我使用的代码:

Bitmap objBmpImage = new Bitmap(1000, 1000);
System.Drawing.Font objFont = new System.Drawing.Font("Arial", 12,
    System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);

Graphics objGraphics = Graphics.FromImage(objBmpImage);
objGraphics.Clear(Color.Transparent);

float angle = (float)360.0 / (float)competences.Count();

objGraphics.TranslateTransform(500, 450);

objGraphics.RotateTransform(-90 - (angle / 3));
foreach (T_Ref_Competence competence in competences)
{
    byte r, g, b;
    HexToInt(competence.T_Ref_CompetenceNiveau2.T_Ref_CompetenceNiveau1.Couleur,
        out r, out g, out b);
    Brush brush = new System.Drawing.SolidBrush(Color.FromArgb(255,r,g,b));
    objGraphics.DrawString(competence.Nom,objFont, brush, 255,0);
    objGraphics.RotateTransform(angle);
}

string filename = Server.MapPath("..\TempImage\") + NomUtilisateur + ".png";
objBmpImage.Save(filename,System.Drawing.Imaging.ImageFormat.Png);

HexToInt 只是一个简单的函数,它接受 #FF0000 并将其转换为 3 字节变量(本例中为 255,0 和 0)。

这是目前的结果:

如你所见,我可以得到一些很好的东西。但是,我有最后一个请求,我很确定这是可能的,但我不确定如何实现。

如何将左侧部分标签的文本旋转 180 度? 在本例中,从 "Organisation" 到 "Vérification qualité et inspection"。请注意,我知道如何决定我必须转向哪一个,我不知道该怎么做。

谢谢。

想法:

  • 角度增加 180 度。
  • 现在标签出现在错误的一侧,但方向正确。将它们向左移动 diameter + textLength。您可以通过向 DrawString 调用提供负 X 来实现。无需再进行转换。

您可以使用 Graphics.MeasureString Method.

计算文本长度