问题标签 [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 回答
314 浏览

locale - Windows 7 上的 IDWriteFont::GetInformationalStrings(...) 问题(日语系统区域设置)

我正在使用 IDWriteFont::GetInformationalStrings(...) 在 Windows 7(日语语言环境 ja-JP)上获取字体的全名,这是问题所在:

当我将 DWRITE_INFORMATIONAL_STRING_FULL_NAME 或 DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME 作为 DWRITE_INFORMATIONAL_STRING_ID 传递时,我得到 exists=false 并且没有返回 IDWriteLocalizedStrings(对于系统上的任何字体)。

但是,相应的条目存在于字体中的名称表中,并且 IDWriteFont::GetInformationalStrings(...) 调用对于 Win 7 上的相同字体(en-us 语言环境)工作正常。

谁能告诉我这是否是 DirectWrite 的问题。

谢谢。

0 投票
1 回答
1553 浏览

c++ - DirectWrite 对齐文本中心

我正在尝试将我必须绘制的文本居中对齐。我使用ID2D1RenderTarget::DrawTextLayout 方法。问题是,如果我将文本水平对齐设置为DWRITE_TEXT_ALIGNMENT_LEADING(默认值),则文本会被适当地绘制,但如果我将此值更改DWRITE_TEXT_ALIGNMENT_CENTER为文本会右移。

示例字符串是

以下是结果(第一个是对齐领先):

在此处输入图像描述 在此处输入图像描述

0 投票
1 回答
274 浏览

delphi - 更改 DrawTextLayout 的 DWriteMeasuringMode

我目前正在使用 DrawText 在 DirectWrite 中绘制文本。

在切换到 DrawTextLayout 时,我注意到别名字母的渲染效果不佳。

有没有办法像在 DrawText 中那样改变测量模式DWRITE_MEASURING_MODE_GDI_CLASSIC

顶部文本使用 DrawText(和DWRITE_MEASURING_MODE_GDI_CLASSIC)绘制,底部文本使用 DrawTextLayout。

http://img5.fotos-hochladen.net/uploads/wwwwwwwww3b9zou6icp.jpg

http://img5.fotos-hochladen.net/uploads/xxxxxxxag8pdm5h2e.jpg

如您所见,底部文本中的字符间距不太好。

如果我将 DrawText 的测量模式设置为DWRITE_MEASURING_MODE_NATURAL我会得到与使用 TextLayout 绘图完全相同的结果。所以问题是我不知道如何改变的测量模式。

0 投票
1 回答
1413 浏览

c++ - Direct2D/DirectDraw 将仅使用 Arial 字体绘制文本

我在某些图形上使用 Direct2D,我已经让它用 DirectDraw 绘制文本(使用 ID2D1RenderTarget 上的 DrawText 函数),但由于某种原因,它不会用我想要的字体绘制。当我为我想要的字体创建文本格式时,我没有收到任何错误。我正在使用多字节选项集进行编译。

字体加载代码:

文字绘制:

0 投票
1 回答
363 浏览

direct2d - IDWriteTextLayout 不修剪日语单词?

我在这里按照一个示例使用省略号来修剪文本:http: //cx5software.sakura.ne.jp/blog/2011/01/18/directwrite-ellipsis-trimming-sign/

它适用于英文文本,但不适用于日文文本。有谁知道为什么?

这是我尝试编写文本的代码片段:“日本语英语”

这是生成的文本。请注意,省略号是在英文字符上添加的,而不是在日文文本上。

在此处输入图像描述

0 投票
2 回答
426 浏览

fonts - What are the default typography settings used by IDWriteTextLayout?

I would like to disable ligatures, which appear to be enabled by default, at least in the fonts that I'm using (i.e. Calibri). It appears that the way to do this is to use IDWriteTextLayout::SetTypography to set an IDWriteTypography object to the layout which contains the various ligature-related font features with a value of zero to disable them. That works to disable the ligatures, but it also affects (disables) other typography settings that I don't want to mess with, such as kerning.

After some experimentation, it turns out that I could disable ligatures just by setting an empty IDWriteTypography object (one that was simply created by the IDWriteFactory and then applied to the layout without alteration). An empty typography seems to have the effect of setting all possible font features to zero/disable. So what I actually want to do is retrieve the default typography settings, override the ones related to ligatures, and then set that to the layout.

Unfortunately I can't find anywhere to retrieve the default settings. Using IDWriteTextLayout::GetTypography just returns null if none has been set, yet it clearly has various typography settings like ligatures enabled in that case. I also can't find any other methods on IDWriteFactory (or any of its newer versions) or any of the font-related interfaces for creating an IDWriteTypography instance. How does the IDWriteTextLayout decide which typography settings to use when no IDWriteTypography has been set? Are the default settings font-specific? Can I retrieve those settings somehow so that I can tweak a few of them and inherit the default values for the rest?

0 投票
1 回答
150 浏览

fonts - 什么排版设置在单词中间包裹的行末尾启用阿拉伯语“结束”上下文形式?

以下是使用IDWriteTextLayout尺寸为 250x100 的布局。它仅包含 150 个阿拉伯字母 U+062A,没有空格,使用 Calibri 24(正常重量/样式/拉伸)。蓝色框显示 250x100 布局区域(文本溢出,因为我没有设置修剪模式),绿色框显示来自指标的布局尺寸,粉红色框考虑了悬垂指标,灰色框来自点击测试每个角色。

不使用任何 IDWriteTypography 对象。

将其与以下内容进行比较,唯一的区别是我调用IDWriteTextLayout::SetTypography并传递了一个空IDWriteTypography对象,该对象是由创建的IDWriteFactory::CreateTypography,根本没有修改。

使用空的 IDWriteTypography 对象。

单看文本的外观,每行的最后一个字符都采用了阿拉伯语“结束”上下文形式,我相信这通常适用于单词的最后一个字符(我不懂阿拉伯语)。我目前只能猜测是 DirectWrite 中的一个错误,这导致文本实际上挂在指定的布局区域和指标返回的区域之外(它挂在框外的量似乎等于添加的额外宽度通过上下文形式的变化)。

从其他实验来看,似乎设置一个空IDWriteTypography对象具有禁用所有可能的字体功能的效果。因此,通过禁用一些默认情况下显然启用的印刷字体功能,我让它在行尾使用“结束”形式的字符,即使它们不在单词的末尾。哪个字体功能正在控制这种行为?我尝试调整实例以启用(将其值设置为 1)文档IDWriteTypography中列出的每个字体功能,一次一个,并且它们都不会导致旧外观。相关功能是实际使用整数值而不是布尔值的功能之一吗?

我的目标是出于不相关的原因IDWriteTypography在我的对象上使用一个对象IDWriteTextLayout,但要避免将文本挂在布局区域之外。因此,或者,是否有其他方法可以解决这种行为?

0 投票
2 回答
651 浏览

c++ - 如何使文本在编辑框中滚动?

我正在使用直接 2D 和直接写入制作自定义编辑框。绘画的东西(盒子)是由直接2D完成的。我从 WM_CHAR 消息中获取输入并将其附加到字符串中。该字符串被写入框中。现在的问题是,每当文本输入超过文本框的长度时,它会自动向下滚动,现在正在输入的文本在文本框中不可见。那么如何滚动文本使其始终在文本框中。

这是显示编辑框的图像

这是显示问题的图像

0 投票
3 回答
688 浏览

c# - 在winrt中读取字体文件内容

如何从 WinRT 平台读取字体文件流?我需要从 C# UWP 获取字体文件内容。据您所知,没有办法直接从 Fonts 文件夹中读取文件。FilePicker 也不适合我,因为选择此文件夹不是用户的责任。我找到了使用 DirectWrite (C++) 枚举字体名称的方法,然后用 COM 组件包装它,该组件将在 C# ( https://code.msdn.microsoft.com/FontExplorer-lets-you-f01d415e#content ) 中可用,我想知道是否可以做类似的事情来将字体文件内容读取为 byte[] 或 Stream?

0 投票
2 回答
119 浏览

winapi - IDWriteInlineObject::GetOverhangMetrics 方法永远不会被调用

我已经实现了 IDWriteInlineObject 接口来将 ID2D1Bitmap 绘制为文本内的内联对象。一切正常,除了一个:我的实现的 GetOverhangMetrics 方法永远不会被调用。

我还尝试了 DirectWrite SDK 示例中的示例(PadWrite 布局示例https ://msdn.microsoft.com/en-us/library/windows/desktop/dd941792%28v=vs.85%29.aspx )。并得到了相同的结果(永远不会调用 InlineImage.cpp 中的“InlineImage::GetOverhangMetrics”)。

因此我的问题是为什么永远不会调用 GetOverhangMetrics 方法的实现?