我一直在使用字形,我知道要使某些字体变为粗体,您必须加载该字体的粗体。但是我要实现的是使用自由字体使常规字体加粗。我已经使用FT_TRANSFORM实现了斜体样式,现在我也想使其变粗体。有任何想法吗?可能吗?我已经阅读了FreeType API参考指南,但找不到运气!问候
要模拟粗体,您可以以px偏移打印两次相同的字形。我认为您不会获得完美的结果,但至少可以得到一些效果。
我以前写过这个。在这里,我添加了一行用于第二次打印,以使字母加粗,如提到的@ c-smile。我不建议这样的把戏。如果有标准的方法,那就更好了。
void DrawFTGlyph(FT_Bitmap* pBitmap, int x, int y)
{
int i, j, p, q;
int xMax = x + pBitmap->width;
int yMax = y + pBitmap->rows;
D3DXCOLOR color = D3DCOLOR_RGBA(255, 255, 255, 1);
for (i = x, p = 0; i < xMax; i++, p++)
{
for (j = y, q = 0; j < yMax; j++, q++)
{
if (i < 0 || j < 0 ||
i >= texture.Size().Width() ||
j >= texture.Size().Height())
{
continue;
}
BYTE intensity = pBitmap->buffer[q * pBitmap->pitch + p];
D3DXCOLOR pixel(color.r * intensity, color.g * intensity, color.b * intensity, color.a * intensity);
texture.SetPixel(i, j, pixel);
texture.SetPixel(i + 2, j + 2, pixel); // Second print
}
}
}
我知道这是一个非常老的问题。
SFML代码显示了如何执行此操作:https://github.com/SFML/SFML/blob/master/src/SFML/Graphics/Font.cpp#L558
重要的地方似乎是FT_Outline_Embolden和FT_Bitmap_Embolden函数。