/// <summary>在指定位置绘制字符</summary> /// <param name="angle">旋转角度(以度为单位)</param> private static void DrawChar(Graphics g, char c, float x, float y, Font font, Color color, int angle) { var pen = new Pen(color, 1); var brush = new SolidBrush(color); //g.DrawString(c.ToString(), font, brush, x, y); var path = GetTextPath(g, c.ToString(), font); var region = new Region(path); var rect = region.GetBounds(g); var rectFull = new RectangleF(0, 0, rect.Width + rect.X, rect.Height + rect.Y); var rectHalf = new RectangleF(0, rect.Y + rect.Height / 2, rectFull.Width, rect.Height / 2); // 下半部区域 region.Intersect(rectHalf); // 绘制字符图片(描边、填充一半底部) var bitmap = new Bitmap((int)rectFull.Width, (int)rectFull.Height); var g2 = Graphics.FromImage(bitmap); g2.InterpolationMode = InterpolationMode.HighQualityBicubic; g2.SmoothingMode = SmoothingMode.AntiAlias; g2.CompositingQuality = CompositingQuality.HighQuality; g2.DrawPath(pen, path); // 描边 g2.FillRegion(brush, region); // 填充一半底部 // 旋转 bitmap = Painter.Rotate(bitmap, angle); // 绘制到目标位置 g.DrawImageUnscaled(bitmap, (int)x, (int)y); }