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

sınıfı, FontFamily belirli bir aile/stil bileş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 Font bir nesnenin boyutundan ve birimlerinden bağımsızdır.

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

Yazı tipi ölçümlerinin çizimi: iniş, iniş ve satır aralığı.

Örnek

Aşağıdaki örnekte Arial yazı tipi ailesinin normal stiline ilişkin ölçümler görüntülenir. Kod ayrıca boyutu 16 piksel olan bir Font nesne (Arial ailesi temelinde) oluşturur ve bu Font nesnenin ölçümlerini (piksel cinsinden) görüntüler.

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

Arial yazı tipi ölçümlerinin örnek kod çıktısı.

Önceki çizimde çıkışın ilk iki satırına dikkat edin. Font Nesne 16 boyut döndürür ve FontFamily nesne 2.048 em yüksekliği döndürür. Bu iki sayı (16 ve 2.048), yazı tipi tasarım birimleri ile nesnenin birimleri (bu örnekte piksel) arasında dönüştürmenin Font anahtarıdır.

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

Tasarım birimlerinden piksellere dönüştürmeyi gösteren formül

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

Em yüksekliğinin (boyut veya em boyutu olarak da adlandırılır) yükselişin ve inişin toplamı olmadığını unutmayın. Yükselişin ve azalmanın toplamı hücre yüksekliği olarak adlandırılır. Hücre yüksekliği eksi iç başta em yüksekliğine eşittir. Hücre yüksekliği artı dış baştaki 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 kullanılmak üzere tasarlanmıştır ve parametresi PaintEventHandlerolan öğesini gerektirir.PaintEventArgs e

Ayrıca bkz.