问题标签 [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.
direct2d - 如何在保持其他文本对象不变的情况下转换 DirectWrite 文本对象之一
我在同一个渲染目标上有几个 DirectWrite 文本对象,我想一次转换其中一个对象,同时保持其他对象不变,在 Direct2D 中,有几种类型的转换
- 渲染目标变换
- 几何变换
- 画笔变换
我不能使用渲染目标变换,因为它会影响上面的所有对象
我不能使用几何变换,因为文本不是几何,并且 IDWriteTextLayout 没有变换方法。
所以对我来说唯一的选择是画笔变换,但是当我尝试使用实心画笔绘制一个变换的矩形时,它仍然在原来的地方绘制(见下面的代码),sdk演示显示了一个位图画笔变换的例子,所以我的问题是:转换是否适用于其他类型的画笔?像实心刷?
这是我的代码,首先,根据经过的时间计算一个平移矩阵,然后使用该矩阵平移画笔,最后绘制矩形。请看一下并告诉我是否是这种情况,或者我是否可以通过其他方式做到这一点?
directwrite - IDWriteTextFormat::SetTextAlignment 不适用于 DWRITE_TEXT_ALIGNMENT_JUSTIFIED
IDWriteTextFormat::SetTextAlignment 用于在 DirectWrite 中对齐文本,它需要一个 DWRITE_TEXT_ALIGNMENT 类型的参数
前 3 种都运行良好,但最后一种 DWRITE_TEXT_ALIGNMENT_JUSTIFIED 不起作用,当我尝试设置它时,我得到一个无效参数错误
这似乎不是一个有效的论点,为什么?有人遇到同样的问题吗?
c++ - 多线程 DirectX 代码中 SEHException 的原因是什么?
我正在使用一个我不熟悉的相当大且复杂的代码库,它使用DirectWrite进行文本渲染。我不知道这是否重要,但这是一个 WinRT(Windows 应用商店)应用程序。
该应用程序是多线程的,并且一些 DirectX 调用是从后台(不是 UI)线程完成的。所有的BeginDraw和EndDraw调用都是从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。)
direct2d - 使用 Direct2D/DirectWrite 确定文本边界框
ID2D1RenderTarget::DrawGlyphRun
采用以下参数:
DWRITE_GLYPH_RUN 在哪里
我试图找出包含输出字形的最小矩形。
这是我所有的数据。请注意,我有 1 个点,baselineOrigin
我可以使用glyphAdvances
和glyphOffsets
从DWRITE_GLYPH_RUN
. 问题是如何确定高度?
谢谢。
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 并且不匹配。
windows-8 - 使用 ID2D1RenderTarget::DrawText 时如何获取文本范围
使用 Direct2D,我可以使用 ID2D1RenderTarget::DrawText 来绘制文本,但是如何在绘制之前获取文本范围?请注意,我希望在 Windows 8 RT 下执行此操作。
谢谢
c++ - 使用 C++ 在 IE 9 中捕获文本
我需要从 IE 9 中捕获文本(最好是当前显示的文本,而不是完整的 HTML 文档)。以前版本的 IE 使用 TextOut,您可以使用 API 监视器清楚地看到文本。现在 IE 9 使用 Direct2D/DirectWrite 呈现文本,因此没有可见文本。建议说您可以连接到 DWrite.dll 并通过 CreateTextLayout 获取文本,但这永远不会被调用。我假设在此渲染阶段之前必须在 MSHTML.dll 中截取文本。
任何帮助获取文本将不胜感激。
提前谢谢了。
c++ - 类成员的内存泄漏
我认为这不需要另一个问题,所以我正在编辑这个非常相关的问题。
我有一个代码可以通过从 char* 转换为 wchar_t* 来绘制文本,我怀疑是内存错误,因为程序内存会以疯狂的速度增长(5,000 K 到 1,500,000 分钟)。
我怀疑 mbstowcs(),但我想我现在发现了问题。
我正在使用一种相当糟糕的方式来获取颜色来绘制一般的东西。
几乎可以肯定,内存使用量的增加来自此功能。有没有更好的方法可以返回这样的自定义颜色?
c++ - 访问冲突 DirectWrite
我正在使用 DirectWrite API,并且正在实现自己的布局和文本渲染引擎。我已经IDWriteTextLayout
成功创建了我的对象。当我拨打以下电话时,我收到一个访问冲突错误,我不知道为什么:
qt - 不同windows版本下qt中使用-directwrite
再会!
我正在使用 Qt 4.8.4,使用 -directwrite 编译。它需要DWrite.dll,它只能在Windows Vista SP2 及更高版本下运行,并且程序不能在Windows XP 下运行。
如何解决这个问题?
我可以编译 Qt 以便它在 Windows 7 中需要 DWrite.dll 而在 Windows XP 中不需要吗?还有其他方法吗?我是否必须为不同的 Windows 版本做出不同的分配?
谢谢你。