C++ 使用True Type字体绘制笔划文本
现在,在我的游戏中,我正在绘制如下的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,
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是不够的。你可以做更大的半径,但它的伸缩性(性能方面)不太好。至于我的评论,你是对的(很抱歉它如此苛刻)。但我认为文本渲染也有成本。