使用True Type字体绘制描边文本

时间:2011-03-20 16:03:34

标签: c++ algorithm user-interface graphics

现在在我的游戏中,我正在绘制这样的真实字体:

for(int i = linesSkipped; i <= maxitems + linesSkipped; ++i)
    {
        if(i >= (int)textRows.size())
        {
            break;
        }
        paintargs.graphics()->drawText(AguiPoint(textX - 2,
            textY - 2 + (i * getFont().getLineHeight())),
            textRows[i].c_str(),AguiColor(0,0,0),getFont());

        paintargs.graphics()->drawText(AguiPoint(textX + 2,
            textY + 2 + (i * getFont().getLineHeight())),
            textRows[i].c_str(),AguiColor(0,0,0),getFont());

        paintargs.graphics()->drawText(AguiPoint(textX,
            textY + (i * getFont().getLineHeight())),
            textRows[i].c_str(),AguiColor(255,128,0),getFont());

    }

所以我用偏移量2绘制它,然后偏移量为-1。

它几乎可以实现我想要的效果,但右上角和左下角仍然未被旋转:

enter image description here

有没有办法绘制它,使它看起来像在Photoshop中抚摸?

由于

3 个答案:

答案 0 :(得分:0)

您使用的是哪种API?是GDI +吗?

在绘制内部之前,您可以在更多位置绘制轮廓:

(x-2, y-2) (x, y-2) (x+2,y-2)
(x-2, y  )          (x+2,y  )
(x-2, y+2) (x, y+2) (x+2,y+2)

或者你可以看看你的图形API是否有类似路径的东西。使用路径,您可以告诉要开始路径的图形库,然后绘制一次文本,然后结束路径。完成后,您告诉图形库“抚摸并填充”路径。这是最干净的解决方案。

答案 1 :(得分:-1)

如果您无法影响文本呈现方法,请在第一步中绘制文本,在第二步中绘制笔划,如此

r=5; //pixel-thickness of stroke 
for ( x = xmin; x<=xmax; x++ )
    for( y = ymin; y=<max; y++ )
       if ( isWhite(x,y) && orangePixelNearby(r,x,y) )
           putPixel(x,y)

当然,有更有效的方法可以做到这一点,但这个方法最能说明如何渲染笔画。

答案 2 :(得分:-1)

您需要在各个角落绘制文字!你正在做的是画在左上角和右下角,分别是X=-2, Y=-2X=2, Y=2。 您需要做的是在左下角和右上角绘制它们,分别是X=-2, Y=2X=2, Y=-2