[英]How to make glyph bold using freetype library?
我一直在使用字形,我知道要使某些字體變粗,您必須加載該字體的粗體版本。 但我想要實現的是使用自由類型使常規字體加粗。 我已經使用 FT_TRANSFORM 實現了斜體樣式,現在我也想讓它加粗。 有任何想法嗎? 是否可以? 我已經閱讀了 FreeType API 參考指南,但沒有找到運氣! 問候
要模擬粗體,您可以使用一個 px 偏移量打印相同的字形兩次。 我不認為你會得到完美的結果,但至少有一些東西。
我知道這是一個非常古老的問題。
SFML 代碼顯示了如何執行此操作: https : //github.com/SFML/SFML/blob/master/src/SFML/Graphics/Font.cpp#L558
重要的一點似乎是 FT_Outline_Embolden 和 FT_Bitmap_Embolden 函數。
我以前寫過這個。 在這里,我為第二次打印添加了一行,使字母像提到的@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
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.