/* 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); } } }
Author: coder
Fonts Class
/* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X */ using System; using System.Drawing; using System.Drawing.Text; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace FontsClass_c { /// <summary> /// Summary description for FontsClass. /// </summary> public class FontsClass : System.Windows.Forms.Form { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public FontsClass() { // // 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() { // // FontsClass // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 323); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "FontsClass"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "FontsClass"; this.Load += new System.EventHandler(this.FontsClass_Load); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new FontsClass()); } private void FontsClass_Load(object sender, System.EventArgs e) { } protected override void OnPaint(PaintEventArgs e) { Graphics G = e.Graphics; G.TextRenderingHint=TextRenderingHint.AntiAlias; int y = 0; G.DrawString("Regular", Fonts.Arial_20, Brushes.Black, 50, y+=40); G.DrawString("Italic", Fonts.ArialItalic_20, Brushes.Black, 50, y+=40); G.DrawString("Regular", Fonts.Chain_20, Brushes.Black, 50, y+=40); G.DrawString("Italic", Fonts.ChainItalic_20, Brushes.Black, 50, y+=40); G.DrawString("Regular", Fonts.Comic_20, Brushes.Black, 50, y+=40); G.DrawString("Italic", Fonts.ComicItalic_20, Brushes.Black, 50, y+=40); } } public sealed class Fonts { private static PrivateFontCollection PFC; private static FontFamily Arial_FF; private static FontFamily Comic_FF; private static FontFamily Chain_FF; static Fonts(){ PFC = new PrivateFontCollection(); PFC.AddFontFile("C:WINNTFontsArial.ttf"); Arial_FF = PFC.Families[0]; PFC.AddFontFile("chainletters.ttf"); Chain_FF = PFC.Families[1]; PFC.AddFontFile("C:WINNTFontscomic.ttf"); Comic_FF = PFC.Families[2]; } public static FontFamily[] Families { get{ return PFC.Families; } } #region Arial Font public static Font Arial_20 { get {return new Font(Arial_FF, 20, FontStyle.Regular, GraphicsUnit.Point);} } public static Font ArialItalic_20 { get {return new Font(Arial_FF, 20, FontStyle.Italic, GraphicsUnit.Point);} } #endregion #region Chain font public static Font Chain_20 { get {return new Font(Chain_FF, 20, FontStyle.Regular, GraphicsUnit.Point);} } public static Font ChainItalic_20 { get {return new Font(Chain_FF, 20, FontStyle.Italic, GraphicsUnit.Point);} } #endregion #region Comic Font public static Font Comic_20 { get {return new Font(Comic_FF, 20, FontStyle.Regular, GraphicsUnit.Point);} } public static Font ComicItalic_20 { get {return new Font(Comic_FF, 20, FontStyle.Italic, GraphicsUnit.Point);} } #endregion } } FontsClass-c.zip( 32 k)
Font Attributes
/*
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 FontAttr_c
{
///
///
public class FontAttr : System.Windows.Forms.Form
{
private System.Windows.Forms.Button cmdGo;
private System.Windows.Forms.Panel P1;
///
///
private System.ComponentModel.Container components = null;
public FontAttr()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.cmdGo = new System.Windows.Forms.Button();
this.P1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// cmdGo
//
this.cmdGo.Location = new System.Drawing.Point(264, 288);
this.cmdGo.Name = “cmdGo”;
this.cmdGo.Size = new System.Drawing.Size(56, 24);
this.cmdGo.TabIndex = 0;
this.cmdGo.Text = “GO”;
this.cmdGo.Click += new System.EventHandler(this.cmdGo_Click);
//
// P1
//
this.P1.AutoScroll = true;
this.P1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.P1.Location = new System.Drawing.Point(16, 32);
this.P1.Name = “P1”;
this.P1.Size = new System.Drawing.Size(304, 240);
this.P1.TabIndex = 1;
//
// FontAttr
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(342, 323);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.P1,
this.cmdGo});
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = “FontAttr”;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = “FontAttr”;
this.Load += new System.EventHandler(this.FontAttr_Load);
this.ResumeLayout(false);
}
#endregion
///
///
[STAThread]
static void Main()
{
Application.Run(new FontAttr());
}
private void FontAttr_Load(object sender, System.EventArgs e)
{
}
private void EnumInstalledFonts()
{
FontStyle Style;
int y = 0;
foreach (FontFamily ff in FontFamily.Families)
{
if ( ff.IsStyleAvailable(Style = FontStyle.Regular) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Bold) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Italic) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Strikeout) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Underline) )
AddString(ff, ref y, Style);
}
}
private void AddString(FontFamily ff, ref int y, FontStyle Style)
{
using ( Font fnt = new Font(ff, 12, Style, GraphicsUnit.Pixel) )
{
int LineSpace = (int)(ff.GetLineSpacing(Style) *
fnt.Size / ff.GetEmHeight(Style));
y += LineSpace + 2;
PictureBox P = new PictureBox();
P.Height = LineSpace;
P.Width = P1.Width;
Bitmap B = new Bitmap(P.Width, P.Height);
using (Graphics G = Graphics.FromImage(B))
{
G.DrawString(ff.Name + ” : Style = ” + Style.ToString(),
fnt, Brushes.Black, 0, 0);
}
P.Image=B;
P1.Controls.Add(P);
P1.Controls[P1.Controls.Count-1].Location = new Point(2, y);
if ( y < P1.Height )
P1.Refresh();
}
}
private void cmdGo_Click(object sender, System.EventArgs e)
{
P1.Controls.Clear();
EnumInstalledFonts();
}
}
}
FontAttr-c.zip( 10 k)[/csharp]
Font size, name and strike out
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class UsingFonts : System.Windows.Forms.Form { private System.ComponentModel.Container components = null; public UsingFonts() { InitializeComponent(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(504, 109); this.Name = "UsingFonts"; this.Text = "UsingFonts"; } static void Main() { Application.Run( new UsingFonts() ); } protected override void OnPaint(PaintEventArgs paintEvent ) { Graphics graphicsObject = paintEvent.Graphics; SolidBrush brush = new SolidBrush( Color.DarkBlue ); // arial, 12 pt bold FontStyle style = FontStyle.Bold; Font arial = new Font( new FontFamily( "Arial" ), 12, style ); // times new roman, 12 pt regular style = FontStyle.Regular; Font timesNewRoman = new Font( "Times New Roman", 12, style ); // courier new, 16 pt bold and italic style = FontStyle.Bold | FontStyle.Italic; Font courierNew = new Font( "Courier New", 16, style ); // tahoma, 18 pt strikeout style = FontStyle.Strikeout; Font tahoma = new Font( "Tahoma", 18, style ); graphicsObject.DrawString( arial.Name + " 12 point bold.", arial, brush, 10, 10 ); graphicsObject.DrawString( timesNewRoman.Name + " 12 point plain.", timesNewRoman, brush, 10, 30 ); graphicsObject.DrawString( courierNew.Name + " 16 point bold and italic.", courierNew, brush, 10, 54 ); graphicsObject.DrawString( tahoma.Name + " 18 point strikeout.", tahoma, brush, 10, 75 ); } }
Get font from Font dialog and redraw string
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form { private System.ComponentModel.Container components; private System.Windows.Forms.FontDialog fontDlg; private Font currFont; public Form1() { InitializeComponent(); CenterToScreen(); fontDlg = new System.Windows.Forms.FontDialog(); fontDlg.ShowHelp = true; Text = "Click on me to change the font"; currFont = new Font("Times New Roman", 12); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = "Form1"; this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } static void Main() { Application.Run(new Form1()); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; g.DrawString("www.kutayzorlu.com/java2s/com...", currFont, new SolidBrush(Color.Black), 0, 0); } private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if (fontDlg.ShowDialog() != DialogResult.Cancel) { currFont = fontDlg.Font; Invalidate(); } } }
Get font family info
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Imaging; public class Test { static void Main() { // Create the format string String formatString = "{0,-16}{1,8}{2,9}{3,10}{4,14}"; // Write the first line of the table Console.WriteLine(formatString, "Font Family Name", "Ascent", "Descent", "EmHeight", "Line Spacing"); // Write font metrics for Courier New font family FontFamily ff = new FontFamily("Courier New"); Console.WriteLine(formatString, ff.GetName(0), ff.GetCellAscent(FontStyle.Regular), ff.GetCellDescent(FontStyle.Regular), ff.GetEmHeight(FontStyle.Regular), ff.GetLineSpacing(FontStyle.Regular)); } }
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()); } }