簡體   English   中英

如何使用freetype庫使字形加粗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM