我从DirectWrite字体文本度量标准获得的字体高度与我作为height参数请求的字体高度不同

时间:2017-03-07 22:25:23

标签: c++ text height metric directwrite

任何人都能解释一下吗?

以下代码:

// - change font size to specified point(pt) size.
// - returns false if there is an error, or true otherwise.

bool GraphicsDirect2D::TextSetFontSize(int size)
{

if (size <= 0)
{
    assert(0 && "Error: Invalid size parameter.");
    return false;
}

// if size has not changed, return
float currentFontSizeDIP = m_pDWTextFormat->GetFontSize();
float currentFontSizePoints = ConvertDIPToPointSize(currentFontSizeDIP);

if (currentFontSizePoints == size)
    return true;

// otherwise, create new object for new text size
IDWriteTextFormat *pNewTextFormat = NULL;


if (FAILED(m_pDWFactory->CreateTextFormat(
    StringToWString(m_textCurrentSettings.strFont).c_str(),
    NULL,
    DWRITE_FONT_WEIGHT_REGULAR,
    DWRITE_FONT_STYLE_NORMAL,
    DWRITE_FONT_STRETCH_NORMAL,
    ConvertPointSizeToDIP(size),
    L"en-us",
    &pNewTextFormat)))
{
    assert(0 && "Error.");
    return false;
}



{
    IDWriteTextLayout *m_pDWTextLayout = NULL;
    DWRITE_TEXT_METRICS tm;

    if (FAILED(m_pDWFactory->CreateTextLayout(
        L"Arial",
        0,
        pNewTextFormat,
        100,
        100,
        &m_pDWTextLayout)))
    {
        Destroy();
        assert(0 && "Error.");
        return false;
    }

    if (FAILED(m_pDWTextLayout->GetMetrics(&tm)))
    {
        assert(0 && "Error.");
    }

    m_fontHeight = tm.height;

    m_pDWTextLayout->Release();
}       


// release the old object
if (m_pDWTextFormat)
{
    m_pDWTextFormat->Release();
    m_pDWTextFormat = NULL;
}

// and point to the new one
m_pDWTextFormat = pNewTextFormat;

m_textCurrentSettings.size = size;

return true;
}

这个函数来自我用来为Direct2D(和DirectWrite for text)提供图形界面的类。该函数将其正在存储的字体替换为新的大小,并更新大小变量以供参考。

问题是如果我将16传递给函数(例如),当使用Direct2D创建时,我给出的字体比点大小16更大。 (使用WinGDI,它在屏幕上生成我的参考大小为16。)Win32函数是我的基准,而directD版本创建的字体比Win32代码更大。

我已经根据我的需要将点大小输入转换为此函数,以便为Direct2D CreateTextFormat()函数提供DIP值。然后我创建一个带有0长度字符串的布局,以获得创建的默认字体的高度。这与我要求的开头不同......

我找不到任何足够详细描述此内容的文档来了解这一点。功能和结构上的每个站点都只是哄骗windows网站所说的结构内容。 (Grrrr !!)它实际上没有说明文本度量函数输出是否在DIP中,我假设它是但是看不到从另一种格式的明显转换回到16!请帮助:)

由于

0 个答案:

没有答案