我正在使用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);

最佳答案

在用于绘制轮廓的钢笔上使用Pen::SetLineJoin,并使用LineJoinMiter以外的其他东西。

关于gdi+ - FileModeWinding和DrawPath导致出现奇数尖峰,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3762740/

10-11 16:16