다음을 통해 공유


문자 모양 및 문자 모양 실행

문자 모양 및 문자 모양 실행은 문자 모양 렌더링 계층인 DirectWrite API의 가장 낮은 기능 계층에서 사용할 수 있습니다.

문자 모양

문자 모양은 지정된 글꼴의 문자에 대한 물리적 표현입니다. 문자에는 문자 모양이 많을 수 있으며 시스템의 각 글꼴은 해당 문자에 대해 다른 문자 모양을 정의할 수 있습니다.

둘 이상의 문자 모양을 단일 문자 모양으로 결합할 수도 있습니다. 이 프로세스를 문자 모양 컴퍼지션이라고 합니다. 이 작업은 문자 모양 분해라고 하는 여러 문자 모양으로 분할되는 단일 문자 모양을 반대 방향으로 수행할 수도 있습니다.

대체 문자 모양

글꼴은 다음 스크린샷과 같이 Pericles OpenType 글꼴의 스타일 대체 문자 모양과 같은 문자에 대체 문자 모양을 제공할 수 있습니다. 'A', 'E' 및 'O' 문자는 스타일 대체 문자 모양으로 렌더링됩니다.

screen shot of

대체 문자 모양의 또 다른 예는 스와시 문자 모양입니다. 다음 스크린샷은 Pescadero 글꼴에 대한 표준 및 스와시 문자 모양을 보여 줍니다.

screen shot of the letters

더 정교한 대체 문자 모양을 포함한 스와시 및 기타 입력 기능은 OpenType을 통해 사용할 수 있습니다. OpenType 입력 기능은 IDWriteTextLayout::SetTypography를 사용하고 원하는 기능과 연결된 DWRITE_FONT_FEATURE_TAG 열거형 상수 전달을 사용하여 텍스트 범위에 적용할 수 있습니다.

문자 모양 실행

문자 모양 실행은 모두 동일한 글꼴 얼굴과 크기뿐만 아니라 동일한 클라이언트 그리기 효과가 있는 경우 연속된 문자 모양 집합을 나타냅니다. 밑줄 및 취소선은 적용된 텍스트 범위에 대한 문자 모양 실행의 일부가 아니며 나중에 그려집니다. 이미지와 같은 인라인 개체도 글꼴의 일부가 아니므로 별도로 그려집니다.

IDWriteFontFace 인터페이스

DirectWrite WPF(Windows Pesentation Foundation)와 동일한 시스템을 사용하여 글꼴 분류에 동일한 시스템을 사용하므로 각 글꼴 패밀리마다 여러 개의 실제 글꼴이 있을 수 있습니다. DirectWrite IDWriteFontFace 인터페이스와 같은 글꼴 얼굴은 특정 가중치, 기울기 및 스트레치가 있는 실제 글꼴을 나타냅니다. 여기에는 글꼴 얼굴 유형, 적절한 파일 참조, 얼굴 식별 데이터 및 메트릭, 이름 및 문자 모양 윤곽선과 같은 다양한 글꼴 데이터가 포함됩니다.

IDWriteFontFace는 글꼴 이름에서 직접 만들거나 글꼴 컬렉션에서 가져올 수 있습니다.

문자 모양 메트릭

개별 문자 모양에는 연결된 메트릭이 있습니다. IDWriteFontFace::GetDesignGlyphMetrics 메서드를 사용하여 문자 모양 실행의 모든 문자 모양에 대한 메트릭을 가져올 수 있습니다. 이렇게 하면 전이 너비, 왼쪽 및 오른쪽 베어링, 위쪽 및 아래쪽 측면 베어링, 높이 및 수직 기준선 원점이 있는 DWRITE_GLYPH_METRICS 구조체 가 반환됩니다.

다음 다이어그램에서는 두 개의 서로 다른 문자 모양 문자의 다양한 메트릭을 보여 줍니다.

diagram of the metrics of two different glyphs

문자 모양 실행 그리기

사용자 지정 텍스트 렌더러를 구현할 때 문자 모양 렌더링은 IDWriteTextRenderer에서 파생된 클래스의 일부로 구현하는 콜백 메서드인 IDWriteTextRenderer::D rawGlyphRun에 의해 처리됩니다. DrawGlyphRun에 전달되는 DWRITE_GLYPH_RUN 구조체에는 전체 문자 모양 실행의 글꼴 얼굴을 나타내는 idWriteFontFace 개체(fontFace)가 포함되어 있습니다.

또한 IDWriteFontFace 개체는 Direct2D로 렌더링할 때 ID2D1SimplifiedGeometrySink와 같은 지정된 기하 도형 싱크 콜백을 사용하여 문자 모양 윤곽선을 계산하는 GetGlyphRunOutline 메서드를 제공합니다.

자세한 내용은 사용자 지정 텍스트 렌더러 구현 방법 항목을 참조하세요.