Mega Code Archive

 
Categories / C# / 2D Graphics
 

Clip Text

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; class FontMenuForm : Form {     protected string strText = "Clip Text";     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());         grfx.SetClip(path);         RectangleF rectfBounds = path.GetBounds();         grfx.TranslateClip(                        (cx - rectfBounds.Width) / 2 - rectfBounds.Left,                        (cy - rectfBounds.Height) / 2 - rectfBounds.Top);         Random rand = new Random();         for (int y = 0; y < cy; y++) {             Pen pen = new Pen(Color.FromArgb(rand.Next(255),                                              rand.Next(255),                                              rand.Next(255)));             grfx.DrawBezier(pen, new Point(0, y),                                  new Point(cx / 3, y + cy / 3),                                  new Point(2 * cx / 3, y - cy / 3),                                  new Point(cx, y));         }     }     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;     } }