Nasıl yapılır: Yazı Tipi Ölçümleri Alma

sınıfı, FontFamily belirli bir aile/stil birleşimi için çeşitli ölçümleri alan aşağıdaki yöntemleri sağlar:

Bu yöntemler tarafından döndürülen değerler yazı tipi tasarım birimlerindedir, bu nedenle belirli bir nesnenin boyutundan ve birimlerinden Font bağımsızdır.

Aşağıdaki çizimde çeşitli ölçümler gösterilmiştir:

Illustration of font metrics: ascent, descent, and line spacing.

Örnek

Aşağıdaki örnekte Arial font ailesinin normal stiline göre ölçümler görüntülenir. Kod ayrıca boyutu 16 piksel olan bir nesne (Arial ailesini temel alarak) oluşturur ve ilgili nesnenin Font ölçümlerini (piksel cinsinden) Font görüntüler.

Aşağıdaki çizimde örnek kodun çıkışı gösterilmiştir:

Example code output of Arial font metrics.

Yukarıdaki çizimde yer alan ilk iki çıkış satırına dikkat ekleyebilirsiniz. nesnesi 16 boyutunu, nesne ise FontFontFamily 2.048 em yüksekliğini döndürür. Bu iki sayı (16 ve 2.048), yazı tipi tasarım birimleri ile nesnenin birimleri (bu durumda piksel) arasında dönüştürmenin Font anahtarıdır.

Örneğin, aşağıdaki gibi, tasarım birimlerinden piksellere ascent'i dönüştürebilirsiniz:

Formula showing the conversion from design units to pixels

Aşağıdaki kod, bir nesnenin veri üyesini Y ayarerek metni dikey olarak PointF konumlar. Her yeni metin satırı için y font.Height koordinatı artırıldı. Bir Height nesnenin Font özelliği, ilgili nesnenin satır aralığını (piksel cinsinden) Font döndürür. Bu örnekte, tarafından döndürülen sayı Height 19'dır. Bunun, satır aralığı ölçümü piksellere dönüştürülerek elde edilen sayıyla (bir tamsayıya yuvarlanır) aynı olduğunu unutmayın.

Em yüksekliğinin (boyut veya em boyutu olarak da adlandırılan) ascent ve descent toplamı olmadığını unutmayın. Ascent ve inişin toplamına hücre yüksekliği denir. Hücre yüksekliği eksi iç öndeki, em yüksekliğine eşittir. Hücre yüksekliği ve dış öndeki değer, satır aralığına eşittir.

string infoString = "";  // enough space for one line of output
int ascent;             // font family ascent in design units
float ascentPixel;      // ascent converted to pixels
int descent;            // font family descent in design units
float descentPixel;     // descent converted to pixels
int lineSpacing;        // font family line spacing in design units
float lineSpacingPixel; // line spacing converted to pixels

FontFamily fontFamily = new FontFamily("Arial");
Font font = new Font(
   fontFamily,
   16, FontStyle.Regular,
   GraphicsUnit.Pixel);
PointF pointF = new PointF(10, 10);
SolidBrush solidBrush = new SolidBrush(Color.Black);

// Display the font size in pixels.
infoString = "font.Size returns " + font.Size + ".";
e.Graphics.DrawString(infoString, font, solidBrush, pointF);

// Move down one line.
pointF.Y += font.Height;

// Display the font family em height in design units.
infoString = "fontFamily.GetEmHeight() returns " +
   fontFamily.GetEmHeight(FontStyle.Regular) + ".";
e.Graphics.DrawString(infoString, font, solidBrush, pointF);

// Move down two lines.
pointF.Y += 2 * font.Height;

// Display the ascent in design units and pixels.
ascent = fontFamily.GetCellAscent(FontStyle.Regular);

// 14.484375 = 16.0 * 1854 / 2048
ascentPixel =
   font.Size * ascent / fontFamily.GetEmHeight(FontStyle.Regular);
infoString = "The ascent is " + ascent + " design units, " + ascentPixel +
   " pixels.";
e.Graphics.DrawString(infoString, font, solidBrush, pointF);

// Move down one line.
pointF.Y += font.Height;

// Display the descent in design units and pixels.
descent = fontFamily.GetCellDescent(FontStyle.Regular);

// 3.390625 = 16.0 * 434 / 2048
descentPixel =
   font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);
infoString = "The descent is " + descent + " design units, " +
   descentPixel + " pixels.";
e.Graphics.DrawString(infoString, font, solidBrush, pointF);

// Move down one line.
pointF.Y += font.Height;

// Display the line spacing in design units and pixels.
lineSpacing = fontFamily.GetLineSpacing(FontStyle.Regular);

// 18.398438 = 16.0 * 2355 / 2048
lineSpacingPixel =
font.Size * lineSpacing / fontFamily.GetEmHeight(FontStyle.Regular);
infoString = "The line spacing is " + lineSpacing + " design units, " +
   lineSpacingPixel + " pixels.";
e.Graphics.DrawString(infoString, font, solidBrush, pointF);
Dim infoString As String = "" ' enough space for one line of output
Dim ascent As Integer ' font family ascent in design units
Dim ascentPixel As Single ' ascent converted to pixels
Dim descent As Integer ' font family descent in design units
Dim descentPixel As Single ' descent converted to pixels
Dim lineSpacing As Integer ' font family line spacing in design units
Dim lineSpacingPixel As Single ' line spacing converted to pixels
Dim fontFamily As New FontFamily("Arial")
Dim font As New Font( _
   fontFamily, _
   16, _
   FontStyle.Regular, _
   GraphicsUnit.Pixel)
Dim pointF As New PointF(10, 10)
Dim solidBrush As New SolidBrush(Color.Black)

' Display the font size in pixels.
infoString = "font.Size returns " & font.Size.ToString() & "."
e.Graphics.DrawString(infoString, font, solidBrush, pointF)

' Move down one line.
pointF.Y += font.Height

' Display the font family em height in design units.
infoString = "fontFamily.GetEmHeight() returns " & _
   fontFamily.GetEmHeight(FontStyle.Regular) & "."
e.Graphics.DrawString(infoString, font, solidBrush, pointF)

' Move down two lines.
pointF.Y += 2 * font.Height

' Display the ascent in design units and pixels.
ascent = fontFamily.GetCellAscent(FontStyle.Regular)

' 14.484375 = 16.0 * 1854 / 2048
ascentPixel = _
   font.Size * ascent / fontFamily.GetEmHeight(FontStyle.Regular)
infoString = "The ascent is " & ascent & " design units, " & ascentPixel _
   & " pixels."
e.Graphics.DrawString(infoString, font, solidBrush, pointF)

' Move down one line.
pointF.Y += font.Height

' Display the descent in design units and pixels.
descent = fontFamily.GetCellDescent(FontStyle.Regular)

' 3.390625 = 16.0 * 434 / 2048
descentPixel = _
   font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular)
infoString = "The descent is " & descent & " design units, " & _
   descentPixel & " pixels."
e.Graphics.DrawString(infoString, font, solidBrush, pointF)

' Move down one line.
pointF.Y += font.Height

' Display the line spacing in design units and pixels.
lineSpacing = fontFamily.GetLineSpacing(FontStyle.Regular)

' 18.398438 = 16.0 * 2355 / 2048
lineSpacingPixel = _
   font.Size * lineSpacing / fontFamily.GetEmHeight(FontStyle.Regular)
infoString = "The line spacing is " & lineSpacing & " design units, " & _
   lineSpacingPixel & " pixels."
e.Graphics.DrawString(infoString, font, solidBrush, pointF)

Kod Derleniyor

Yukarıdaki örnek, Windows Forms ile birlikte kullanım için tasarlanmıştır ve parametresi PaintEventArgse olan 'i PaintEventHandler gerektirir.

Ayrıca bkz.