Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Ник Симмондс -

C# - Графика

Все примеры / Мультимедиа / Графика

Font Metrics

Автор: Ник Симмондс | добавлено: 10.01.2011, 19:03 | просмотров: 1360 (2+) | комментариев: 0 | рейтинг: *x0
Пример выводит на форму метрическую информацию о различных шрифтах. В частности показывает размер хвостов и верхушек у таких символов, как: Й, Ц, р и т.п.

Код

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;

/// <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);
  }
}
Файлы FontMetrics.zip (27,17 Кб)
Об авторе

Ник Симмондс

Нет информации об авторе...
Ник Симмондс
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики