如何使用TextAnalyzer.GetTypographicFeatures方法

问题描述 投票:0回答:1

我需要在我的应用程序(C#)中获取给定字体的可用OpenType功能。我通过SharpDX使用DirectWrite,我的时间非常糟糕。

我知道最好的解决方案是使用这种方法:

SharpDX.DirectWrite.TextAnalyzer2.GetTypographicFeatures

但我不知道如何从中得到结果,因为我不知道从哪里获取参数。

这些是我需要提供的参数才能获得字体功能:

  1. fontFace FontFace
  2. scriptAnalysis ScriptAnalysis
  3. localName字符串
  4. maxTagCount int
  5. actualTagCount int
  6. 标签FontFeatureTag

有人可以给我一个更好的解释或(理想情况下)一些代码。几乎没有关于它的文档,所以我不知道在哪里可以获得这些参数和/或它们的含义。

提前致谢。

c# sharpdx directwrite
1个回答
0
投票

我最后弄清楚了。感谢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);
}
© www.soinside.com 2019 - 2024. All rights reserved.