Example #1
0
        /// <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);
        }