gpt4 book ai didi

c# - 带有字形信息的字体渲染

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:58 24 4
gpt4 key购买 nike

我调用“GetCharABCWidthsFloatW”来获取字符的宽度信息。有了这个,我将获得左侧轴承、右侧轴承和高级宽度。

为了定位每个字符,我将从一个从零开始的“xPlacement”变量开始。我将首先通过减去“左侧轴承”来调整 xPlacement 变量。字符绘制完成后,我将按字符的宽度将其推进(我将在稍后显示计算)。然后,我将通过添加来自当前“xPlacement”的“右侧轴承”信息来移动 xPlacement 变量。

在我看来,这就是字符放置代码,对吗?

重要的是校正字符的宽度。宽度将通过采用 advancedWidth 加上左侧轴承的 POSITIVE 版本和右侧轴承的 POSITIVE 版本来计算。我会将此值转换为正数,如果它们为负数,这样我就可以获得字符的总宽度。

这里是一些关于它是如何生成的伪代码。

float xPlacement = 0.0f;
for(int i = 0; i < strlen(text); ++i)
{
char charValue = text[i];
GetCharWidthABC(.., .., charInfo);

float posLeft = charInfo.leftSideBearing;
if(charInfo.leftSideBearing < 0)
posLeft = -charInfo.leftSideBearing;

float posRight = charInfo.rightSideBearing;
if(posRight < 0)
posRight = -charInfo.rightSideBearing;

float posWidth = posRight + posRight + charInfo.advancedWidth;

float letterWidth = posWidth;

xPlacement -= charInfo.leftSideBearing;

/* generated some vertex coordinates, using the xPlacement variable and letterWidth */

xPlacement += letterWidth;
xPlacement += charInfo.rightSideBearing
}

这看起来是正确的方法吗?

最佳答案

由于在问题标记中提到了 C#,您可能会对查看 .NET Framework 附带的一些非常强大的类感兴趣(从版本 3.0 开始,实际上附带 WPF 核心程序集)。它们是:

  • GlyphTypeFace : 指定与磁盘上的字体文件相对应的物理字体。可用于解析 .TTF 文件并从中构建字形。
  • GlyphRun : 表示来自单一字体的单一面的一系列字形,单一大小,单一渲染风格,有许多有用的属性和方法(例如,你可以从它构建一个几何图形)
  • GlyphRunDrawing :表示呈现 GlyphRun 的 Drawing 对象。您可能不太感兴趣,因为它更依赖于 WPF 渲染/合成系统。

前两个类在某种程度上独立于技术/设备,除了 .NET Framework 本身。

关于c# - 带有字形信息的字体渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com