问题标签 [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 投票
2 回答
1537 浏览

c++ - 最接近 Direct2D/DirectWrite 的跨平台替代方案?

Windows 特定的 2D API 有哪些好的跨平台替代方案?我正在寻找一种用于渲染简单几何对象的 API,以及一种用于渲染具有亚像素抗锯齿 (ClearType) 和 OpenType 支持的文本的 API,特别是对提示的支持。

0 投票
1 回答
604 浏览

c# - 使用本地磁盘中的字体文件

我正在使用 C# 开发一个 UWP 应用程序来预览用户本地磁盘中的字体文件。我正在使用 SharpDX 库来读取 .ttf 文件内容并查询不同的字体属性。我的问题是:

如何将 TextBlock FontFamily 设置为加载的字体?

当然,使用加载的字体名称设置 FontFamily 属性不起作用,因为加载的字体不需要安装在系统上。

请帮忙。

0 投票
2 回答
565 浏览

c# - SharpDx:设置字符宽度

我正在使用 SharpDX 编写 C# Direct2D 应用程序,但是我可以理解 C++ 中提供的答案/示例。

我想渲染文本并更改某些字符的宽度,使其看起来像图片:

在此处输入图像描述

字母 B 扩大到 200%,字母 D 缩小到 50%

在下面的代码中,我绘制了字形的几何图形因此可以更改几何图形的宽度但这不是一个好的解决方案,因为几何图形绘制出来的效果就像您在图片中看到的那样模糊。

在此处输入图像描述

总之,有两个问题:

  1. 如何更改字符的宽度?

  2. 如何在不模糊的情况下绘制字母的几何形状。(可以用 ClearType 渲染几何图形吗?)

    /li>
0 投票
1 回答
164 浏览

gdi - 如何基于 LOGFONT 结构创建具有特定拉伸的 DirectWrite 字体?

我有一个 LOGFONT 结构,我使用 CreateFontFromLOGFONT() 将其转换为 IDWriteFont:

如果 LOGFONT 描述了 Tw Cen MT Condensed字体,我希望 DirectWrite 的字体具有分配的 DWRITE_FONT_STRETCH_CONDENSED 属性。

LOGFONT 的宽度为“0”,无论我选择什么拉伸(冷凝、宽等)。似乎只能从字体名称中扣除拉伸,而DirectWrite的方法无法做到这一点。这是一个错误吗?

如何基于 LOGFONT 结构创建具有特定拉伸的 DirectWrite 字体?

0 投票
1 回答
179 浏览

text - 如何获得 DirectWrite 布局的高度?

我知道我可以调用IDWriteTextLayout::GetMetrics,但这给了我文本的边界,包括文本上方和下方的空间,用于上升和下降等。但是,我正在寻找的是文本实际的确切空间量占用。我将如何获得或计算这个边界框?

0 投票
1 回答
632 浏览

c++ - DirectWrite GDI 互操作:使用“IDWriteFontFace”绘制文本的简单方法

我有一个设备上下文,其中选择了一些字体,我想DrawTextID2D1RenderTarget.

目前,我走以下路线来实现这一目标:

  • 获得一个IDWriteFontFacevia CreateFontFaceFromHdc
  • IDWriteFont通过IDWriteFontFace默认系统字体集合(我通过GetSystemFontCollection- 请参阅下一步)获取一个。
  • 获取IDWriteTextFormatvia CreateTextFormat,提供 中指定的参数IDWriteFont并指定nullptrfontCollection,表示我想使用默认的系统字体集合。
  • 传递IDWriteTextFormatDrawText.

我对此感到奇怪的是,我IDWriteFontFace在第一步中已经有了一个,显然必须“返回”并要求一个字体集合来获取一个IDWriteFont,只是为了将它传递给一个DrawTextFormat,然后可以使用它DrawText。这似乎是不必要的复杂 - 特别是因为要绘制文本,系统可能不得不降到一个IDWriteFontFace反正,对吧?

我找到DrawGlyphRun了 ,但这需要例如 a baselineOrigin,我必须事先计算(更不用说它glyphRun本身了)。

ID2D1RenderTarget如果我已经有了一个,难道没有更简单的方法可以将文本绘制到一个上IDWriteFontFace吗?

0 投票
1 回答
339 浏览

opentype - 使用 DirectWrite 进行部分连字选择

使用来自IDWriteTextLayout的HitTestTextPosition样式 API,我无法正确处理“ti”、“ffi”或其他带有 Calibri 等字体的连字中的文本位置。它总是在连字之后或之前返回位置,而不是像 t|i 或 f|f|i 那样在内部。

使用 DirectWrite API 在连字中进行插入符号移动的推荐方法是什么?

0 投票
1 回答
231 浏览

fonts - DirectWrite 字体拉伸

我想使用 DirectWrite 将字体垂直或水平拉伸 x%。

我正在使用 IDWriteTextFormat::CreateTextFormat 和 IDWriteFactory::CreateTextLayout 和 DrawTextLayout。

传递给 CreateTextFormat 的 DWRITE_FONT_STRETCH 枚举太粗糙,没有给我足够的控制权。例如,我想要的不是“半压缩”,而是 71% 的垂直压缩。

到目前为止,如果没有 direct2d 缩放转换或使用 GDI,我无法弄清楚如何做到这一点。我宁愿避免使用 GDI 的 LOGFONT,因为它会使我的应用程序更加复杂。

0 投票
1 回答
463 浏览

c# - Wpf 应用程序崩溃 dwrite.dll

我的 WPF 应用程序在某些不同的 PC 上崩溃。

这是 Windows 事件日志:

Faulting module name: dwrite.dll, version: 6.3.9600.18696,time stamp:0x5915df3a<br/> Exception code:0xc00000fd<br/> Fault offset:0x0000706a<br/> Faulting process id:0x59f8<br/> Faulting application start time:0x01d3b7aa9dba2f15<br/> Faulting application path:C:\Windows\SYSTEM32\dwrite.dll<br/> Faulting package full name: <br/> Faulting package-relative application ID:<br/>

Windows 10 和视频驱动程序已更新。dxdiag 没有发现任何问题。请告诉我解决这个问题的方向。

0 投票
2 回答
436 浏览

directwrite - 使用directwrite在指定矩形中显示文本

我想在指定的矩形和指定的字体大小中显示带有directwrite的文本,矩形外的文本应该被切断。

通过搜索,我发现了一些关于 CreateTextLayout 的信息,但看起来无法用它定义字体大小。

只应显示红色矩形中的文本

感谢您的回答。