作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 DirectWrite 用于混合颜色文本格式(准确地说是语法突出显示),但似乎无法在 Layout 或 Typography 选项中找到方法。唯一的选择是在渲染文本时传递一个画笔,这对我不起作用,因为我基本上只有一个布局。帮助!
最佳答案
使用IDWriteTextLayout::SetDrawingEffect
对子范围应用绘图效果。如果您在 D2D 中使用 DWrite DrawTextLayout
,听起来像您,那么该绘图效果将只是一个画笔(例如 ID2D1Brush
通过 CreateSolidColorBrush
或渐变画笔之一)。如果你已经实现了自己的IDWriteTextRenderer
对于 IDWriteTextLayout::Draw
,那么绘图效果可以是您所理解的任何内容。在 IDWriteTextRenderer::DrawGlyphRun
回调,然后调用 QueryInterface
在 drawingEffect 参数上,或者如果您确定它是您自己的类型,直接使用 static_cast 即可。
// ... 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);
关于directwrite - 如何在 DirectWrite 中呈现混合颜色的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656014/
我是一名优秀的程序员,十分优秀!