DirectWrite에서 혼합 컬러 텍스트를 렌더링하려면 어떻게해야합니까?
-
11-09-2019 - |
문제
혼합 컬러 텍스트 형식 (구문 강조 표시, 정확한 구문)에 DirectWrite를 사용하고 싶지만 레이아웃 또는 타이포그래피 옵션에서이를 수행하는 방법을 찾을 수는 없습니다. 유일한 옵션은 텍스트를 렌더링 할 때 브러시를 전달하는 것입니다. 기본적으로 하나의 레이아웃 만 있기 때문에 나에게 효과가 없습니다. 돕다!
해결책
사용 IDWriteTextLayout::SetDrawingEffect
서브랑에 드로잉 효과를 적용합니다. D2D와 함께 DWRITE를 사용하는 경우 DrawTextLayout
, 당신이있는 것처럼 들리면, 그 드로잉 효과는 단지 브러시 일 것입니다 (예 : ID2D1Brush
~을 통해 CreateSolidColorBrush
또는 그라디언트 브러시 중 하나). 자신만의 구현 한 경우 IDWriteTextRenderer
~을 위한 IDWriteTextLayout::Draw
, 그러면 드로잉 효과는 당신이 해석하는 것이 될 수 있습니다. 에서 IDWriteTextRenderer::DrawGlyphRun
콜백, 당신은 전화합니다 QueryInterface
DraweFefect 매개 변수에서 또는 귀하가 자신의 유형인지 확인하는 경우 STATIC_CATCOL 직접 캐스트하십시오.
// ... create the colored brushes and determine where to draw ...
wchar_t const* text = L"Red Green";
dwriteFactory->CreateTextLayout(....., OUT &textLayout);
DWRITE_TEXT_RANGE textRange1 = {0,3}, textRange2 = {4,5};
textLayout->SetDrawingEffect(redBrush, textRange1);
textLayout->SetDrawingEffect(greenBrush, textRange2);
renderer->DrawTextLayout(point, textLayout, defaultBrush);
제휴하지 않습니다 StackOverflow