다음을 통해 공유


글꼴 메트릭 가져오기

FontFamily 클래스는 특정 패밀리/스타일 조합에 대한 다양한 메트릭을 검색하는 다음 메서드를 제공합니다.

이러한 메서드에서 반환되는 숫자는 글꼴 디자인 단위이므로 특정 Font 개체의 크기와 단위와는 독립적입니다.

다음 그림에서는 상승, 하강 및 줄 간격을 보여 줍니다.

셀 상승, 셀 하강 및 줄 간격을 보여 주는 인접한 줄에 있는 두 문자의 다이어그램

다음 예제에서는 Arial 글꼴 패밀리의 일반 스타일에 대한 메트릭을 표시합니다. 또한 이 코드는 크기가 16픽셀인 Font 개체(Arial 패밀리 기반)를 만들고 특정 Font 개체에 대한 메트릭(픽셀 단위)을 표시합니다.

#define INFO_STRING_SIZE 100  // one line of output including null terminator
WCHAR infoString[INFO_STRING_SIZE] = L"";
UINT  ascent;                 // font family ascent in design units
REAL  ascentPixel;            // ascent converted to pixels
UINT  descent;                // font family descent in design units
REAL  descentPixel;           // descent converted to pixels
UINT  lineSpacing;            // font family line spacing in design units
REAL  lineSpacingPixel;       // line spacing converted to pixels
                       
FontFamily   fontFamily(L"Arial");
Font         font(&fontFamily, 16, FontStyleRegular, UnitPixel);
PointF       pointF(10.0f, 10.0f);
SolidBrush   solidBrush(Color(255, 0, 0, 0));

// Display the font size in pixels.
StringCchPrintf(
   infoString, 
   INFO_STRING_SIZE, 
   L"font.GetSize() returns %f.", font.GetSize());

graphics.DrawString(
   infoString, -1, &font, pointF, &solidBrush);

// Move down one line.
pointF.Y += font.GetHeight(0.0);

// Display the font family em height in design units.
StringCchPrintf(
   infoString, 
   INFO_STRING_SIZE, 
   L"fontFamily.GetEmHeight() returns %d.", 
   fontFamily.GetEmHeight(FontStyleRegular));

graphics.DrawString(infoString, -1, &font, pointF, &solidBrush);

// Move down two lines.
pointF.Y += 2.0f * font.GetHeight(0.0f);

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

// 14.484375 = 16.0 * 1854 / 2048
ascentPixel = 
   font.GetSize() * ascent / fontFamily.GetEmHeight(FontStyleRegular);

StringCchPrintf(
   infoString,
   INFO_STRING_SIZE,
   L"The ascent is %d design units, %f pixels.",
   ascent, 
   ascentPixel);

graphics.DrawString(infoString, -1, &font, pointF, &solidBrush);

// Move down one line.
pointF.Y += font.GetHeight(0.0f);

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

// 3.390625 = 16.0 * 434 / 2048
descentPixel = 
   font.GetSize() * descent / fontFamily.GetEmHeight(FontStyleRegular);

StringCchPrintf(
   infoString, 
   INFO_STRING_SIZE,
   L"The descent is %d design units, %f pixels.",
   descent, 
   descentPixel);

graphics.DrawString(infoString, -1, &font, pointF, &solidBrush);

// Move down one line.
pointF.Y += font.GetHeight(0.0f);

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

// 18.398438 = 16.0 * 2355 / 2048
lineSpacingPixel = 
   font.GetSize() * lineSpacing / fontFamily.GetEmHeight(FontStyleRegular);

StringCchPrintf(
   infoString, 
   INFO_STRING_SIZE,
   L"The line spacing is %d design units, %f pixels.",
   lineSpacing, 
   lineSpacingPixel);

graphics.DrawString(infoString, -1, &font, pointF, &solidBrush);
            

다음 그림에서는 이전 코드의 출력을 보여 줍니다.

글꼴 크기와 높이, 상승, 하강 및 줄 간격을 나타내는 텍스트가 있는 창의 스크린샷

앞의 그림에서 처음 두 줄의 출력을 확인합니다. Font 개체는 16의 크기를 반환하고 FontFamily 개체는 2,048의 em 높이를 반환합니다. 이 두 숫자(16 및 2,048)는 글꼴 디자인 단위와 Font 개체의 단위(이 경우 픽셀) 간에 변환하는 키입니다.

예를 들어 다음과 같이 디자인 단위에서 픽셀로 상승을 변환할 수 있습니다.

1854개의 디자인 단위를 16픽셀로 곱하는 수식은 2048 디자인 단위로 나뉘어 14.484375픽셀과 같습니다.

앞의 코드는 PointF 개체의 y 데이터 멤버를 설정하여 텍스트를 세로로 배치합니다. y 좌표는 텍스트의 새 줄마다 font.GetHeight(0.0f)씩 증가합니다. Font 개체의 Font::GetHeight 메서드는 특정 Font 개체의 줄 간격(픽셀)을 반환합니다. 이 예제에서 Font::GetHeight 에서 반환되는 숫자는 18.398438입니다. 이는 줄 간격 메트릭을 픽셀로 변환하여 얻은 숫자와 동일합니다.