DirectWrite에서 혼합 컬러 텍스트를 렌더링하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1656014

  •  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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top