Mega Code Archive

 
Categories / C# / 2D Graphics
 

Draw font cell ascent, cell descent, line space, em height

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {     protected override void OnPaint(PaintEventArgs e) {     Graphics g = e.Graphics;     g.FillRectangle(Brushes.White, this.ClientRectangle);     FontFamily ff = new FontFamily("Times New Roman");     float emSizeInGU = 24f;       Font f = new Font(ff, emSizeInGU);     int emSizeInDU = ff.GetEmHeight(FontStyle.Regular);     int ascentInDU = ff.GetCellAscent(FontStyle.Regular);     int descentInDU = ff.GetCellDescent(FontStyle.Regular);     int lineSpacingInDU = ff.GetLineSpacing(FontStyle.Regular);     float ascentInGU = ascentInDU * (emSizeInGU / emSizeInDU);     float descentInGU = descentInDU * (emSizeInGU / emSizeInDU);     float lineSpacingInGU = lineSpacingInDU * (emSizeInGU / emSizeInDU);     PointF textOrigin = new PointF(20, 20);     PointF nextLineOrigin = new PointF(textOrigin.X,textOrigin.Y + f.Height);     g.DrawString("AxgQ", f, Brushes.Black, textOrigin);     g.DrawString("AxgQ", f, Brushes.Black, nextLineOrigin);     int lineLen = 100;     g.DrawLine(Pens.Blue,textOrigin,new PointF(textOrigin.X + lineLen, textOrigin.Y));     g.DrawLine(Pens.Red,nextLineOrigin,new PointF(nextLineOrigin.X + lineLen, nextLineOrigin.Y));     PointF p = new PointF(textOrigin.X,textOrigin.Y + lineSpacingInGU);     g.DrawLine(Pens.Blue, p,new PointF(p.X + lineLen, p.Y));     p = new PointF(nextLineOrigin.X,nextLineOrigin.Y + lineSpacingInGU);     g.DrawLine(Pens.Red, p,new PointF(p.X + lineLen, p.Y));     p = new PointF(textOrigin.X,textOrigin.Y + lineSpacingInGU - ascentInGU);     g.DrawLine(Pens.Blue, p,new PointF(p.X + lineLen, p.Y));     p = new PointF(nextLineOrigin.X, nextLineOrigin.Y +lineSpacingInGU - ascentInGU);     g.DrawLine(Pens.Red, p, new PointF(p.X + lineLen, p.Y));     p = new PointF(textOrigin.X,textOrigin.Y + lineSpacingInGU + descentInGU);     g.DrawLine(Pens.Blue, p,new PointF(p.X + lineLen, p.Y));     p = new PointF(nextLineOrigin.X,nextLineOrigin.Y + lineSpacingInGU + descentInGU);     g.DrawLine(Pens.Red, p,new PointF(p.X + lineLen, p.Y));     }     public static void Main() {         Application.Run(new Form1());     } }