问题标签 [directwrite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1053 浏览

direct2d - 如何在保持其他文本对象不变的情况下转换 DirectWrite 文本对象之一

我在同一个渲染目标上有几个 DirectWrite 文本对象,我想一次转换其中一个对象,同时保持其他对象不变,在 Direct2D 中,有几种类型的转换

  • 渲染目标变换
  • 几何变换
  • 画笔变换

我不能使用渲染目标变换,因为它会影响上面的所有对象

我不能使用几何变换,因为文本不是几何,并且 IDWriteTextLayout 没有变换方法。

所以对我来说唯一的选择是画笔变换,但是当我尝试使用实心画笔绘制一个变换的矩形时,它仍然在原来的地方绘制(见下面的代码),sdk演示显示了一个位图画笔变换的例子,所以我的问题是:转换是否适用于其他类型的画笔?像实心刷?

这是我的代码,首先,根据经过的时间计算一个平移矩阵,然后使用该矩阵平移画笔,最后绘制矩形。请看一下并告诉我是否是这种情况,或者我是否可以通过其他方式做到这一点?

0 投票
1 回答
378 浏览

directwrite - IDWriteTextFormat::SetTextAlignment 不适用于 DWRITE_TEXT_ALIGNMENT_JUSTIFIED

IDWriteTextFormat::SetTextAlignment 用于在 DirectWrite 中对齐文本,它需要一个 DWRITE_TEXT_ALIGNMENT 类型的参数

前 3 种都运行良好,但最后一种 DWRITE_TEXT_ALIGNMENT_JUSTIFIED 不起作用,当我尝试设置它时,我得到一个无效参数错误

在此处输入图像描述

这似乎不是一个有效的论点,为什么?有人遇到同样的问题吗?

0 投票
3 回答
1359 浏览

c++ - 多线程 DirectX 代码中 SEHException 的原因是什么?

我正在使用一个我不熟悉的相当大且复杂的代码库,它使用DirectWrite进行文本渲染。我不知道这是否重要,但这是一个 WinRT(Windows 应用商店)应用程序。

该应用程序是多线程的,并且一些 DirectX 调用是从后台(不是 UI)线程完成的。所有的BeginDrawEndDraw调用都是从UI 线程进行的,并且一些DrawText调用是从后台线程进行的。我确保这些调用都没有重叠,并且 DrawText 仅在 BeginDraw 和 EndDraw 对之间调用。

但是,有时我在调用 DrawText 方法时会收到SEHException 。从UI 线程调用时它永远不会发生,只有在从后台线程调用时才会发生。
这不会发生在每台计算机上。它经常发生在某些人身上,而在其他人身上根本无法复制。
VS 调试器所说的确切消息是这样的:“x.DLL 中发生了'System.Runtime.InteropServices.SEHException' 类型的第一次机会异常”,它发生在我调用ID2D1DeviceContext.DrawText()函数和调试器时在 DrawText 调用中中断 d2d1.h 头文件。

当抛出 SEHException 时,有什么方法可以调试或诊断出了什么问题?(这显然与从后台线程调用 DrawText 函数有关。)
除此之外,从后台线程调用 DirectX 函数是否有任何一般规则?(我确保使用 D2D1_FACTORY_TYPE_MULTI_THREADED 选项创建 D2D1Factory。)

0 投票
1 回答
3472 浏览

direct2d - 使用 Direct2D/DirectWrite 确定文本边界框

ID2D1RenderTarget::DrawGlyphRun采用以下参数:

DWRITE_GLYPH_RUN 在哪里

我试图找出包含输出字形的最小矩形。

这是我所有的数据。请注意,我有 1 个点,baselineOrigin我可以使用glyphAdvancesglyphOffsetsDWRITE_GLYPH_RUN. 问题是如何确定高度?

谢谢。

0 投票
1 回答
1177 浏览

c++ - 如何使用 DirectWrite 确定基线位置

使用 DirectWrite 和 Direct2D1,我试图模仿 Illustrator CS6 对区域文本框的渲染。CS6 有一个选项,基线可以放置在距离区域文本框顶部的距离处,该距离等于字体的“em 框大小”。例如,使用 Trajan Pro 字体,100pt 磅值,基线距离区域文本框顶部 87.5pt。

从 IDWriteFontFace 对象,我可以获得上升、下降、designUnitsPerEm 值等。

似乎缺少的是相对于 em 框顶部的基线位置。

有没有办法获得设计单位中相对于 em 框顶部的基线位置?

DWRITE_FONT_METRICS 没有它。我查看了 DWRITE_LINE_METRICS,但它的基线值是 ascent + lineGap 并且不匹配。

0 投票
1 回答
1411 浏览

windows-8 - 使用 ID2D1RenderTarget::DrawText 时如何获取文本范围

使用 Direct2D,我可以使用 ID2D1RenderTarget::DrawText 来绘制文本,但是如何在绘制之前获取文本范围?请注意,我希望在 Windows 8 RT 下执行此操作。

谢谢

0 投票
0 回答
584 浏览

c++ - 使用 C++ 在 IE 9 中捕获文本

我需要从 IE 9 中捕获文本(最好是当前显示的文本,而不是完整的 HTML 文档)。以前版本的 IE 使用 TextOut,您可以使用 API 监视器清楚地看到文本。现在 IE 9 使用 Direct2D/DirectWrite 呈现文本,因此没有可见文本。建议说您可以连接到 DWrite.dll 并通过 CreateTextLayout 获取文本,但这永远不会被调用。我假设在此渲染阶段之前必须在 MSHTML.dll 中截取文本。

任何帮助获取文本将不胜感激。

提前谢谢了。

0 投票
3 回答
194 浏览

c++ - 类成员的内存泄漏

我认为这不需要另一个问题,所以我正在编辑这个非常相关的问题。

我有一个代码可以通过从 char* 转换为 wchar_t* 来绘制文本,我怀疑是内存错误,因为程序内存会以疯狂的速度增长(5,000 K 到 1,500,000 分钟)。

我怀疑 mbstowcs(),但我想我现在发现了问题。

我正在使用一种相当糟糕的方式来获取颜色来绘制一般的东西。

几乎可以肯定,内存使用量的增加来自此功能。有没有更好的方法可以返回这样的自定义颜色?

0 投票
1 回答
134 浏览

c++ - 访问冲突 DirectWrite

我正在使用 DirectWrite API,并且正在实现自己的布局和文本渲染引擎。我已经IDWriteTextLayout成功创建了我的对象。当我拨打以下电话时,我收到一个访问冲突错误,我不知道为什么:

0 投票
1 回答
775 浏览

qt - 不同windows版本下qt中使用-directwrite

再会!

我正在使用 Qt 4.8.4,使用 -directwrite 编译。它需要DWrite.dll,它只能在Windows Vista SP2 及更高版本下运行,并且程序不能在Windows XP 下运行。

如何解决这个问题?

我可以编译 Qt 以便它在 Windows 7 中需要 DWrite.dll 而在 Windows XP 中不需要吗?还有其他方法吗?我是否必须为不同的 Windows 版本做出不同的分配?

谢谢你。