Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用True Type字体绘制笔划文本_C++_Algorithm_User Interface_Graphics - Fatal编程技术网

C++ 使用True Type字体绘制笔划文本

C++ 使用True Type字体绘制笔划文本,c++,algorithm,user-interface,graphics,C++,Algorithm,User Interface,Graphics,现在,在我的游戏中,我正在绘制如下的true type字体: for(int i = linesSkipped; i <= maxitems + linesSkipped; ++i) { if(i >= (int)textRows.size()) { break; } paintargs.graphics()->drawText(AguiPoint(textX - 2,

现在,在我的游戏中,我正在绘制如下的true type字体:

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());

    }
for(int i=linesSkipped;i=(int)textRows.size())
{
打破
}
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(255128,0),getFont();
}
所以我用2的偏移量画它,然后用-1的偏移量

它几乎满足了我的要求,但右上角和左下角的边缘仍然是未拉伸的:

有没有办法把它画得像Photoshop中的抚摸


谢谢

如果您没有办法影响文本渲染方法,请在第一步中绘制文本,在第二步中绘制笔划,如下所示

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)
r=5//笔划像素厚度

对于(x=xmin;x您需要在所有的角上绘制文本!您所做的是在左上角和右下角绘制,分别是
x=-2,Y=-2
x=2,Y=2

您需要做的是,在左下角和右上角也绘制它们,分别是
X=-2,Y=2
X=2,Y=-2
,您使用的是哪个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是否具有类似路径的功能。使用路径,您可以告诉图形库您要开始一个路径,然后绘制一次文本,然后结束路径。完成后,您可以告诉图形库“笔划并填充”路径。这是最干净的解决方案。

但不适用于较大半径。不幸的是,我使用的FreeTypes遇到了同样的问题:质量低,不适用于较大半径。这与Dlaor的解决方案没有什么区别。事实上,这是他的翻版。@artistoex:要处理好所有字形,您需要在所有八个字形上都绘制偏移量。Dlaor的四个OFFET是不够的。你可以做更大的半径,但它的伸缩性(性能方面)不太好。至于我的评论,你是对的(很抱歉它如此苛刻)。但我认为文本渲染也有成本。