我正在使用gdiplus来“点击”一个文本输出。在某些情况下,我们看到“尖峰”出现在图形的顶部或底部,我真的不确定为什么。我们可以通过调整笔划宽度和字体大小来最小化这一点,但这不是一个好的解决方案。我希望有人能给我解释一下这个问题。
以及生成这个4的代码样本、它的轮廓和峰值(无意的)
GraphicsPath path(FillModeWinding);
path.AddString(text,wcslen(text),&fontFamily,StateInfo.TheFont.TheWeight,(REAL)minSize,PointF((REAL)ptStart.x, (REAL)ptStart.y),&sf);
// Draw the outline first
if (StateInfo.StrokeWidth > 0) {
Gdiplus::Color strokecolor(GetRValue(StateInfo.StrokeColor), GetGValue(StateInfo.StrokeColor), GetBValue(StateInfo.StrokeColor));
Pen pen(strokecolor,(REAL)StateInfo.StrokeWidth);
graphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
graphics.SetPixelOffsetMode(Gdiplus::PixelOffsetModeHighQuality);
graphics.DrawPath(&pen, &path);
}
// Draw the text by filling the path
graphics.FillPath(&solidBrush, &path);
发布于 2010-10-06 14:39:37
使用您正在使用的钢笔上的Pen::SetLineJoin来绘制轮廓,并使用LineJoinMiter以外的其他工具。
发布于 2010-10-06 14:26:14
我同意填充模式不是问题,我认为这只是用于绘制轮廓的笔宽。对于具有带尖角的封闭空格(如4和'A')的字符,随着用于绘制轮廓的笔宽变大,内部形状(四个字符中的小三角形)的大小也会变大。
最终,内部形状将变得太大,外部形状无法容纳,并将开始戳穿,导致您看到的工件。
这是当轮廓宽度变大时,固定字体大小(也是影响字体)的图示。这里没有填充,只调用了graphics.DrawPath():
填充操作并不关心轮廓宽度,而是使用字母的原始形状。
这部分掩盖了一些混乱的轮廓,从而掩盖了问题。下面是启用了填充的情况:
字符‘A’也会发生类似的事情:
编辑:如另一个答案所示,调用SetLineJoin
是阻止这种情况发生的方法。
https://stackoverflow.com/questions/3762740
复制相似问题