Mega Code Archive

 
Categories / C# / 2D Graphics
 

Font Metrics

/* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X */ using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace FontMetrics_c {     /// <summary>     /// Summary description for FontMetrics.     /// </summary>     public class FontMetrics : System.Windows.Forms.Form     {     private System.Windows.Forms.Button cmdRoman;     private System.Windows.Forms.Button cmdArial;     private System.Windows.Forms.Button cmdComic;     private System.Windows.Forms.Button cmdCourier;         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public FontMetrics()         {             //             // Required for Windows Form Designer support             //             InitializeComponent();             //             // TODO: Add any constructor code after InitializeComponent call             //         }         /// <summary>         /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if (components != null)                  {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Windows Form Designer generated code         /// <summary>         /// Required method for Designer support - do not modify         /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {       this.cmdRoman = new System.Windows.Forms.Button();       this.cmdArial = new System.Windows.Forms.Button();       this.cmdComic = new System.Windows.Forms.Button();       this.cmdCourier = new System.Windows.Forms.Button();       this.SuspendLayout();       //        // cmdRoman       //        this.cmdRoman.Location = new System.Drawing.Point(8, 240);       this.cmdRoman.Name = "cmdRoman";       this.cmdRoman.Size = new System.Drawing.Size(104, 24);       this.cmdRoman.TabIndex = 0;       this.cmdRoman.Text = "Times Roman";       this.cmdRoman.Click += new System.EventHandler(this.cmdRoman_Click);       //        // cmdArial       //        this.cmdArial.Location = new System.Drawing.Point(128, 240);       this.cmdArial.Name = "cmdArial";       this.cmdArial.Size = new System.Drawing.Size(104, 24);       this.cmdArial.TabIndex = 1;       this.cmdArial.Text = "Arial Black";       this.cmdArial.Click += new System.EventHandler(this.cmdArial_Click);       //        // cmdComic       //        this.cmdComic.Location = new System.Drawing.Point(248, 240);       this.cmdComic.Name = "cmdComic";       this.cmdComic.Size = new System.Drawing.Size(104, 24);       this.cmdComic.TabIndex = 2;       this.cmdComic.Text = "Comic Sans MS";       this.cmdComic.Click += new System.EventHandler(this.cmdComic_Click);       //        // cmdCourier       //        this.cmdCourier.Location = new System.Drawing.Point(368, 240);       this.cmdCourier.Name = "cmdCourier";       this.cmdCourier.Size = new System.Drawing.Size(104, 24);       this.cmdCourier.TabIndex = 3;       this.cmdCourier.Text = "Courier New";       this.cmdCourier.Click += new System.EventHandler(this.cmdCourier_Click);       //        // FontMetrics       //        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);       this.ClientSize = new System.Drawing.Size(492, 273);       this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                   this.cmdCourier,                                                                   this.cmdComic,                                                                   this.cmdArial,                                                                   this.cmdRoman});       this.MaximizeBox = false;       this.MinimizeBox = false;       this.Name = "FontMetrics";       this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;       this.Text = "FontMetrics";       this.Load += new System.EventHandler(this.FontMetrics_Load);       this.ResumeLayout(false);     }         #endregion         /// <summary>         /// The main entry point for the application.         /// </summary>         [STAThread]         static void Main()          {             Application.Run(new FontMetrics());         }     private void FontMetrics_Load(object sender, System.EventArgs e)     {          }     private void DisplayFontMetrics(FontFamily ff, Font fnt)     {       //Create graphics object and make it pretty       Graphics G = this.CreateGraphics();       G.SmoothingMode=SmoothingMode.AntiAlias;       G.TextRenderingHint=TextRenderingHint.AntiAlias;       //Get some metrics       int LineSpace = (int)(ff.GetLineSpacing(fnt.Style)*                             fnt.Size/ff.GetEmHeight(fnt.Style));       int Descent = (int)(ff.GetCellDescent(fnt.Style)*                             fnt.Size/ff.GetEmHeight(fnt.Style));       int Ascent = (int)(ff.GetCellAscent(fnt.Style)*                             fnt.Size/ff.GetEmHeight(fnt.Style));       //Create the base line to sit the text on       Point BaseLineStart = new Point ( 15, this.Height*3/5);       Point BaseLineEnd = new Point ( this.Width-15, this.Height*3/5);       //Top left corner of text is the ascent       Point StringPoint = new Point(75, (int)(BaseLineStart.Y-Ascent));       //Clear the screen and draw the string on a base line       G.Clear(Color.AliceBlue);       G.DrawString("A j Q", fnt, Brushes.Blue, StringPoint);       G.DrawLine(Pens.Black, BaseLineStart, BaseLineEnd);       //Draw the annotation lines        Size LineSize = new Size(0, LineSpace);       Size AscentSize = new Size(0, Ascent);       Size DescentSize = new Size(0, Descent);       G.DrawLine(Pens.Black, BaseLineStart-LineSize, BaseLineEnd-LineSize);       G.DrawLine(Pens.Red, BaseLineStart-AscentSize, BaseLineEnd-AscentSize);       G.DrawLine(Pens.DarkGreen, BaseLineStart+DescentSize,                                   BaseLineEnd+DescentSize);       //Annotate       Font AnnoFont = new Font("Arial", 10);       G.DrawString("Line Space = " + LineSpace.ToString(), AnnoFont,          Brushes.Black,          20,         (int)(BaseLineStart.Y-LineSpace-12));       G.DrawString("Ascent = " + Ascent.ToString(), AnnoFont,          Brushes.Red,          250,         (int)(BaseLineStart.Y-Ascent-12));       G.DrawString("Descent = " + Descent.ToString(), AnnoFont,          Brushes.DarkGreen,          350,         (int)(BaseLineStart.Y+Descent/8));     }     private void cmdRoman_Click(object sender, System.EventArgs e)     {       FontFamily ff = new FontFamily("Times New Roman");       Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);       DisplayFontMetrics(ff, f);     }     private void cmdArial_Click(object sender, System.EventArgs e)     {       FontFamily ff = new FontFamily("Arial Black");       Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);       DisplayFontMetrics(ff, f);     }     private void cmdComic_Click(object sender, System.EventArgs e)     {       FontFamily ff = new FontFamily("Comic Sans MS");       Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);       DisplayFontMetrics(ff, f);     }     private void cmdCourier_Click(object sender, System.EventArgs e)     {       FontFamily ff = new FontFamily("Courier New");       Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);       DisplayFontMetrics(ff, f);     }     } }