ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?

Posted

技术标签:

【中文标题】ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?【英文标题】:ID3DXFont : Text is stretched, how to get font's width & height? 【发布时间】:2019-12-14 08:47:05 【问题描述】:

我正在尝试为我的自定义游戏引擎添加字体支持。我在 VS2012 中使用 C++ 和 DirectX 9。问题:当你创建一个ID3DXFont对象时,你必须分别指定字符的宽度和高度,但是不同字体的纵横比(宽度/高度)是不同的,从而使一种字体被拉伸,另一种正常。

拉伸的“OCR A Extended”字体:https://imgur.com/MC7hP8L 正常的“Pristina”字体:https://imgur.com/jHX2xFk

我尝试在 Google 和其他论坛上搜索可能的函数来从系统或其他来源获取这两个值,但没有运气...

现在,我正在手动输入:

ID3DXFont* f;
D3DXCreateFont(
        m_context->getD3Ddevice(),
        size, size / 4.0F,   // this part is the issue
        FW_REGULAR,
        0,
        false,
        DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,
        DRAFT_QUALITY,
        DEFAULT_PITCH | FF_DONTCARE,
        m_name,
        &f );

这段代码没有修改过,就是操作上面两张图显示的文字的那个。

【问题讨论】:

"VS2012" - 哇,老派。您可能想要升级它并利用 C++17 以及过去(几乎)10 年来所做的所有改进.. 【参考方案1】:

好的,所以我错过了来自 Microsoft 的重要帮助:DirectX Samples(来自 DirectX SDK)。

显然有一个关于如何绘制文本的问题,解决方案是简单地为宽度参数输入 0:

D3DXCreateFont(
        m_context->getD3Ddevice(),
        size, 0,   // In order, height & width
        FW_REGULAR,
        0,
        false,
        DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,
        DRAFT_QUALITY,
        DEFAULT_PITCH | FF_DONTCARE,
        m_name,
        &f );

【讨论】:

以上是关于ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 文本在应用缩放变换时被压缩/拉伸

c-lodop 使用html生成,结果字体被拉伸了怎么办,急!

如何获取已被约束拉伸的视图的高度? - iOS

TCPDF 垂直拉伸文本

拉伸由 GD 创建的图像文本

自动布局 - 在模拟器中运行时文本字段垂直拉伸