如何在 Directwrite 中获取给定字体的可用 OpenType 功能?
How get available OpenType features for given font in Directwrite?
我构建了一个文本编辑器并使用 DirectWrite
,我想为用户提供在所选文本上启用 OpenType features
的选项,但并非每种字体都具有所有功能,许多字体都具备一点也不。我的问题是如何知道使用 DirectWrite 的给定字体有哪些 OpenType 功能可用?
我尝试了以下代码,但 res
总是 == S_OK
甚至字体也缺少该功能:
DWRITE_FONT_FEATURE fontFeature = { DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7, 1 };
HRESULT res = pTypography->AddFontFeature(fontFeature); // res == S_OK
res = g_pFancyTextLayout->SetTypography(pTypography, range); // res == S_OK
更新:
我用 SharpDx
尝试了以下代码,但是 list
总是空的,即使是 Gabriola
字体:
public static FontFeatureTag[] GetOpenTypeFeatures(FontFace fontFace)
{
var list = new List<FontFeatureTag>();
foreach (FontFeatureTag tag in System.Enum.GetValues(typeof(FontFeatureTag)))
{
if (fontFace.TryGetFontTable((int)tag, out DataPointer dataPointer, out IntPtr intPtr))
{
list.Add(tag);
}
}
return list.ToArray();
}
我正在使用 SharpDX 编写 C# 应用程序,但是我可以理解 C++ 中提供的 answers/examples。
在深入搜索 Microsoft 关于 DirectWirte 的文档后,我设法通过使用 TextAnalyzer2 找到了预期的接口。
请注意,DirectWrite 为每个新的 TextAnalyzer 添加了新功能和成员。它从 TextAnalyzer 开始,然后是 TextAnalyzer1 和 TextAnalyzer2。 [您会在 DirectWrite 的其他接口上发现相同的演变]。
这里是:IDWriteTextAnalyzer2::GetTypographicFeatures
Use the IDWriteTextAnalyzer2 interface - can be found here. Using the GetTypographicFeatures that"Returns a complete list of OpenType features available for a script or font".
我构建了一个文本编辑器并使用 DirectWrite
,我想为用户提供在所选文本上启用 OpenType features
的选项,但并非每种字体都具有所有功能,许多字体都具备一点也不。我的问题是如何知道使用 DirectWrite 的给定字体有哪些 OpenType 功能可用?
我尝试了以下代码,但 res
总是 == S_OK
甚至字体也缺少该功能:
DWRITE_FONT_FEATURE fontFeature = { DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7, 1 };
HRESULT res = pTypography->AddFontFeature(fontFeature); // res == S_OK
res = g_pFancyTextLayout->SetTypography(pTypography, range); // res == S_OK
更新:
我用 SharpDx
尝试了以下代码,但是 list
总是空的,即使是 Gabriola
字体:
public static FontFeatureTag[] GetOpenTypeFeatures(FontFace fontFace)
{
var list = new List<FontFeatureTag>();
foreach (FontFeatureTag tag in System.Enum.GetValues(typeof(FontFeatureTag)))
{
if (fontFace.TryGetFontTable((int)tag, out DataPointer dataPointer, out IntPtr intPtr))
{
list.Add(tag);
}
}
return list.ToArray();
}
我正在使用 SharpDX 编写 C# 应用程序,但是我可以理解 C++ 中提供的 answers/examples。
在深入搜索 Microsoft 关于 DirectWirte 的文档后,我设法通过使用 TextAnalyzer2 找到了预期的接口。
请注意,DirectWrite 为每个新的 TextAnalyzer 添加了新功能和成员。它从 TextAnalyzer 开始,然后是 TextAnalyzer1 和 TextAnalyzer2。 [您会在 DirectWrite 的其他接口上发现相同的演变]。
这里是:IDWriteTextAnalyzer2::GetTypographicFeatures
Use the IDWriteTextAnalyzer2 interface - can be found here. Using the GetTypographicFeatures that"Returns a complete list of OpenType features available for a script or font".