如何使用TextAnalyzer.GetTypographicFeatures方法
How to use TextAnalyzer.GetTypographicFeatures method
我需要在我的应用程序 (C#) 中获取给定字体的可用 OpenType 功能。我正在通过 SharpDX 使用 DirectWrite,但我玩得很开心。
我知道最好的解决办法是使用这个方法:
SharpDX.DirectWrite.TextAnalyzer2.GetTypographicFeatures
但我不知道如何从中得到结果,因为我不知道从哪里得到参数。
为了获得字体特性,我需要提供这些参数:
- fontFace FontFace
- scriptAnalysis ScriptAnalysis
- localName String
- maxTagCount int
- actualTagCount int
- 标签 FontFeatureTag
谁能给我提供更好的解释或(最好)一些代码。几乎没有关于它的文档,所以我不知道从哪里可以得到这些参数and/or它们的意思。
提前致谢。
我终于明白了。感谢 Buglehead 给了我最后一块拼图。
这是一个例子。在这段代码中,我首先加载所有系统字体,然后获取特定字体,然后获取该特定字体的 FontFeatureTags。
using SharpDX.DirectWrite;
private void LoadFontFeatureTags()
{
Factory f = new Factory(FactoryType.Isolated);
Factory4 _factory = new Factory4(f.NativePointer);
_factory.CreateFontCollectionFromFontSet(_factory.SystemFontSet, out FontCollection1 collection);
List<SharpDX.DirectWrite.FontFamily> loadedFonts = new List<SharpDX.DirectWrite.FontFamily>();
for (int i = 0; i < collection.FontFamilyCount; i++)
{
var family = collection.GetFontFamily(i);
loadedFonts.Add(family);
}
var gabriolaFont = loadedFonts.FirstOrDefault(x => x.FamilyNames.GetString(0).Contains("Gabriola"));
var gabriolaFirstChild = gabriolaFont.GetFont(0);
Font3 f3 = new Font3(gabriolaFirstChild.NativePointer);
f3.CreateFontFace(out FontFace3 face3);
ScriptAnalysis analysis = new ScriptAnalysis();
TextAnalyzer analyzer = new TextAnalyzer(f);
TextAnalyzer2 analyzer2 = new TextAnalyzer2((IntPtr)analyzer);
int maxTagCount = 32;
FontFeatureTag[] featuresArray = new FontFeatureTag[maxTagCount];
analyzer2.GetTypographicFeatures(face3, analysis, "es-US", maxTagCount, out int actualCount, featuresArray);
}
我需要在我的应用程序 (C#) 中获取给定字体的可用 OpenType 功能。我正在通过 SharpDX 使用 DirectWrite,但我玩得很开心。
我知道最好的解决办法是使用这个方法:
SharpDX.DirectWrite.TextAnalyzer2.GetTypographicFeatures
但我不知道如何从中得到结果,因为我不知道从哪里得到参数。
为了获得字体特性,我需要提供这些参数:
- fontFace FontFace
- scriptAnalysis ScriptAnalysis
- localName String
- maxTagCount int
- actualTagCount int
- 标签 FontFeatureTag
谁能给我提供更好的解释或(最好)一些代码。几乎没有关于它的文档,所以我不知道从哪里可以得到这些参数and/or它们的意思。
提前致谢。
我终于明白了。感谢 Buglehead 给了我最后一块拼图。
这是一个例子。在这段代码中,我首先加载所有系统字体,然后获取特定字体,然后获取该特定字体的 FontFeatureTags。
using SharpDX.DirectWrite;
private void LoadFontFeatureTags()
{
Factory f = new Factory(FactoryType.Isolated);
Factory4 _factory = new Factory4(f.NativePointer);
_factory.CreateFontCollectionFromFontSet(_factory.SystemFontSet, out FontCollection1 collection);
List<SharpDX.DirectWrite.FontFamily> loadedFonts = new List<SharpDX.DirectWrite.FontFamily>();
for (int i = 0; i < collection.FontFamilyCount; i++)
{
var family = collection.GetFontFamily(i);
loadedFonts.Add(family);
}
var gabriolaFont = loadedFonts.FirstOrDefault(x => x.FamilyNames.GetString(0).Contains("Gabriola"));
var gabriolaFirstChild = gabriolaFont.GetFont(0);
Font3 f3 = new Font3(gabriolaFirstChild.NativePointer);
f3.CreateFontFace(out FontFace3 face3);
ScriptAnalysis analysis = new ScriptAnalysis();
TextAnalyzer analyzer = new TextAnalyzer(f);
TextAnalyzer2 analyzer2 = new TextAnalyzer2((IntPtr)analyzer);
int maxTagCount = 32;
FontFeatureTag[] featuresArray = new FontFeatureTag[maxTagCount];
analyzer2.GetTypographicFeatures(face3, analysis, "es-US", maxTagCount, out int actualCount, featuresArray);
}