首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectWrite: Windows 7上的字符间距

DirectWrite: Windows 7上的字符间距
EN

Stack Overflow用户
提问于 2015-04-27 08:29:10
回答 1查看 759关注 0票数 4

我需要将现有C++代码中的一些文本转换为位图呈现例程,即使用GDI和GDI+来使用DirectWrite (CFF支持和OTF-特性支持)。

我是DirectWrite的新手。我花了一段时间研究迁移现有功能所需的内容,并做了一些原型工作。我遇到了一个问题:我的问题是,DirectWrite (开箱即用)不支持字符间距调整(这是现有应用程序的要求),至少在Windows 7上是不支持的。我知道它是随Windows 8一起出现的,但这个现有应用程序的另一个要求是在Windows 7上运行。

到目前为止,我在研究中发现的是,实现自定义DirectWrite文本布局的方法似乎是可行的,但我没有找到任何关于如何这样做的好指南,特别是在字符间距方面(关于如何创建定制文本布局的MSDN文档/示例对我来说有点模糊)。

正如我估计的那样,在花费数天和/或数周的研究和开发重新发明车轮之前,这里有人知道一个DirectWrite文本布局的示例实现,我可以用它作为起点或教程吗?

UPDATE1:不是一个答案,而是--我发现IDWriteTextLayout1界面(支持设置字符空间)不仅附带了Windows 8,还附带了Windows 7上的“Windows7PlatformUpdateforSP1”(KB 2670838)。由于我可以要求out应用程序正常运行,这解决了我的问题,尽管它没有回答我的问题。

EN

回答 1

Stack Overflow用户

发布于 2015-07-02 08:48:03

定制布局非常复杂,这是由于bidi和行包装以及需要调用较低级别API的原因,但是这里有一个示例[https://msdn.microsoft.com/en-us/library/windows/desktop/dd941711(v=vs.85).aspx](https://msdn.microsoft.com/en-us/library/windows/desktop/dd941711(v=vs.85%29.aspx]).至于字符间距,一旦从成形过程(IDWriteTextAnalyzer::GetGlyphs)返回字形推进数组,只需在所有进度中添加一个增量即可。在链接的SDK示例中,您将在for中添加一个FlowLayout::ShapeGlyphRuns循环,以便在行包装和绘图之前进行。

代码语言:javascript
复制
STDMETHODIMP FlowLayout::ShapeGlyphRuns(IDWriteTextAnalyzer* textAnalyzer)
{
...
    hr = ShapeGlyphRun(textAnalyzer, runIndex, glyphStart);
...
    // Add additional character spacing to each trailing edge of each glyph.
    for (auto& advance : glyphAdvances_)
    {
        advance += 5.0f;
    }
...
}

注意,Windows8中还添加了一个API ApplyCharacterSpacing,它比手动添加它更健壮,因为它考虑了每个集群具有多个符号的更复杂的脚本(当然,如果您有该API,那么您也已经拥有了IDWriteTextLayout::SetCharacterSpacing)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29890744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档