gpt4 book ai didi

c++ - 垂直文本在 win32 GDI c++ 中不会加粗

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:08 25 4
gpt4 key购买 nike

我正在尝试在 win32 GDI api 中绘制垂直文本。我调用 CreateFont(),角度为 2700,粗体为 900。

logPxlY = ::GetDeviceCaps (c->_hdc, LOGPIXELSY);
_hfont = ::CreateFont (-::MulDiv (point, logPxlY, 72),
0, angle, weight, 0, FALSE, FALSE, FALSE, 0, 0, 0, 0,
FIXED_PITCH | FF_MODERN, face);

其中 face 是“Courier New”,point 是 9,angle 是 2700,weight 是 900。

文本已正确旋转,但与正常的 Courier New 渲染相比,它非常模糊。这是因为 truetype 正在将普通文本打磨得非常好,并且不会为奇怪的旋转文本或其他东西而烦恼吗?

感谢任何见解:)

最佳答案

字体映射器有时会有点奇怪。 700 是粗体,900 应该是“黑色”。但是,您可能有一个 Courier New Bold 字体文件,因此可以直接使用它,而您可能没有有一个 Courier New Black 字体文件,因此它将被合成——可能来自正常 Courier New 字体而不是 Courier New Bold(不知道为什么会这样,但这就是生活)。

如果您尝试遍历各种可能性,就像这样(目前是 MFC 代码,但这个想法无论如何都适用):

CFont fonts[num];

pDC->SetBkMode(TRANSPARENT);
for (int i=0; i<num; i++) {
fonts[i].CreateFont(10, 0, 2700, 0, i*100, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, OUT_CHARACTER_PRECIS, PROOF_QUALITY, FF_MODERN, L"Courier New");
pDC->SelectObject(fonts+i);
pDC->TextOut(20+i*14, 20, L"This is some text");
}

你可能会看到的(无论如何我得到的)看起来像这样:

Various weights of Courier New

700 粗细的字体明显比 800 或 900 粗细的字体粗。这也不是 Courier New 独有的——例如,将字体名称更改为 Times New Roman 的相同代码会产生如下输出:

Various weights of Times New Roman

有点接近,但 700 的粗细看起来仍然明显比 800 或 900 暗。我不会用屏幕截图让你厌烦,但当文本是水平的时会发生同样的效果。

编辑:另一个小细节:虽然它可能没有任何区别,但您目前计算字体大小有点不正确——您使用的是 logpixelsy,这在字体为水平时有意义。对于垂直字体,您应该改用 logpixelsx。在典型的屏幕上,它们是相同的,但在打印机上(例如)它们可能有很大不同。

关于c++ - 垂直文本在 win32 GDI c++ 中不会加粗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397005/

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