Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么DrawTextLayout会忽略SharpDX中设置DrawingEffect的笔刷?_C#_Sharpdx_Directwrite - Fatal编程技术网

C# 为什么DrawTextLayout会忽略SharpDX中设置DrawingEffect的笔刷?

C# 为什么DrawTextLayout会忽略SharpDX中设置DrawingEffect的笔刷?,c#,sharpdx,directwrite,C#,Sharpdx,Directwrite,我的目标是在一个单一的布局中绘制具有一定范围、不同大小和不透明度的文本。 这种方法似乎是可行的 defaultForegroundBrush参数的文档: 用于在textLayout中绘制尚未绘制的任何文本的画笔 将画笔作为绘图效果与之关联(由 方法) 根据该方法的备注部分 可以将颜色或渐变笔刷等设置为 如果使用 绘制文本,该笔刷将用于绘制指定范围 文本的格式 此图形效果与指定的范围相关联,并将 当范围 在绘图时绘制 听起来像是ID2D1RenderTarget::DrawTextLayout肯定

我的目标是在一个单一的布局中绘制具有一定范围、不同大小和不透明度的文本。 这种方法似乎是可行的

defaultForegroundBrush
参数的文档:

用于在textLayout中绘制尚未绘制的任何文本的画笔 将画笔作为绘图效果与之关联(由 方法)

根据该方法的备注部分

可以将颜色或渐变笔刷等设置为 如果使用 绘制文本,该笔刷将用于绘制指定范围 文本的格式

此图形效果与指定的范围相关联,并将 当范围 在绘图时绘制

听起来像是
ID2D1RenderTarget::DrawTextLayout
肯定会使用
IDWriteTextLayout::SetDrawingEffect
设置的任何画笔。这似乎证实了这一观点

但是,实际上,
DrawTextLayout
忽略我使用
SetDrawingEffect
设置的任何
SolidColorBrush
。我得到的样式和大小都在适当的范围内,但所有内容都是使用默认笔刷绘制的

我通过实现一个非常简单的自定义文本渲染器()来解决这个问题,并按照文档中的说明从
ID2D1RenderTarget::DrawTextLayout
中准确地绘制了我所期望的内容。如果
textrenderbase
DrawGlyphRun
的性能比
ID2D1RenderTarget::DrawTextLayout
慢25%以上,我会感到满意

是什么导致了这个问题?我是否可以按照文档建议使用颜色,并且仍然使用
ID2D1RenderTarget::DrawTextLayout

而不是:

layout.SetDrawingEffect(myBrush, new TextRange(1, 5));
可以这样称呼:

layout.SetDrawingEffect(myBrush.NativePointer, new TextRange(1, 5));

发现并修复了一个内存泄漏()。我正在尝试做类似的事情,并且对您的答案jnm2非常感兴趣,您能给出一个CustomBrushTextRenderer类的示例用法吗?我没有C++背景,所以一直在与本地DirectX文档进行斗争。@ MyLyJS使用正在替换<代码> ReNealTrave.DruttPrices(PARAMS);<代码>与
CustomBrushTextRenderer.DrawTextLayout(renderTarget,params)一起使用-这能回答你的问题吗?是的,谢谢。还有一个很快的问题吗?是否可以将自定义类传递给TextLayout.SetDrawingEffect()?(而不是颜色)我基本上希望传递两种颜色,并使用它们为文本渲染阴影,否则再次感谢您的帮助!对不起,我不能理解。我相信您可以使用任何类,这取决于渲染器来决定如何处理自定义类,正如您可以看到的不应该是自定义效果(笔刷)一样。换句话说,我希望自定义效果只能由正在检查它的自定义渲染器识别。我不知道DirectX,但看起来一次只能有一种效果,所以你必须将阴影和前景色效果合并到一个效果类中。