GraphicsPath.Transform : GraphicsPath « System.Drawing.Drawing2D « C# / C Sharp by API






GraphicsPath.Transform

 
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
   
class FontMenuForm: Form
{
     protected string strText = "Tall in the Center";
     protected Font font = new Font("Times New Roman", 24);
   
     public static void Main()
     {
          Application.Run(new FontMenuForm());
     }
     public FontMenuForm()
     {
          ResizeRedraw = true;
     }
     protected void DoPage(Graphics grfx, Color clr, int cx, int cy)
     {
          GraphicsPath path = new GraphicsPath();
          float fFontSize = PointsToPageUnits(grfx, font);
   
          path.AddString(strText, font.FontFamily, (int) font.Style,
                         fFontSize, new PointF(0, 0), new StringFormat());
   
          RectangleF rectf = path.GetBounds();
   
          path.Transform(new Matrix(1, 0, 0, 1, 
                                    -(rectf.Left + rectf.Right) / 2,
                                    -(rectf.Top + rectf.Bottom) / 2));
          rectf = path.GetBounds();
          PointF[] aptf = path.PathPoints;
   
          for (int i = 0; i < aptf.Length; i++)
               aptf[i].Y *= 2 * (rectf.Width - Math.Abs(aptf[i].X)) / 
                                                                 rectf.Width; 
          path = new GraphicsPath(aptf, path.PathTypes);
   
          grfx.TranslateTransform(cx / 2, cy / 2);
          grfx.FillPath(new SolidBrush(clr), path);

                                            
     }
     public float GetAscent(Graphics grfx, Font font)
     {
          return font.GetHeight(grfx) * 
                    font.FontFamily.GetCellAscent(font.Style) /
                         font.FontFamily.GetLineSpacing(font.Style);
     }
     public float GetDescent(Graphics grfx, Font font)
     {
          return font.GetHeight(grfx) * 
                    font.FontFamily.GetCellDescent(font.Style) /
                         font.FontFamily.GetLineSpacing(font.Style);
     }
     public float PointsToPageUnits(Graphics grfx, Font font)
     {
          float fFontSize;
   
          if (grfx.PageUnit == GraphicsUnit.Display)
               fFontSize = 100 * font.SizeInPoints / 72;
          else
               fFontSize = grfx.DpiX * font.SizeInPoints / 72;
   
          return fFontSize;
     }
}

   
  








Related examples in the same category

1.new GraphicsPath()
2.GraphicsPath.AddArc
3.GraphicsPath.AddBezier
4.GraphicsPath.AddEllipse
5.GraphicsPath.AddLine
6.GraphicsPath.AddRectangle
7.GraphicsPath.AddString
8.GraphicsPath.CloseFigure()
9.GraphicsPath.StartFigure()