文本绘制“粗体”

本文关键字:粗体 绘制 文本 | 更新日期: 2023-09-27 17:55:57

所以我正在编写一个程序来生成图表并将其保存到PNG。从我读到的内容来看,如果我画到一个窗口,它的行为不会这样,但我没有那样做。

问题是,当我将用于绘制标签的画笔传递给另一种方法来绘制时,有时文本看起来很粗。此外,Y 坐标似乎与它有关,因为它发生在我正在绘制的图表的每隔一行。它也不是一个很好的大胆,它就像一个坚韧不拔,看起来凌乱的大胆。有些人建议将文本呈现提示更改为抗锯齿,它解决了"粗体"问题,但它看起来不如 ClearType 好看。

请注意,如果我在一种方法中完成所有操作而不传递画笔,则不会发生这种情况,这是其中最令人费解的部分。有什么想法吗?

下面是一些代码:

        // Draw the timeline.
        int y = 0;
        bool shadeRow = true;
        foreach (TimelineRow row in timeline.chart)
        {
            int rowHeight = row.height + TimelineRow.ROW_GAP;
            if (shadeRow)
            {
                g.FillRectangle(shadeBrush, 0, y, chartWidth, rowHeight);
            }
            // Draw name labels, guidelines, and timeline row.
            g.DrawString(row.name, labelFont, labelBrush, PADDING, (int)Math.Ceiling(y + (float)PADDING / 2));
            for (int i = 0; i < row.years.Length; i++)
            {
                int blockX = labelsWidth + i * TimelineRow.DEFAULT_HEIGHT;
                g.DrawLine(i % 5 == 0 ? yearGridDark : yearGridLight, blockX, y, blockX, y + rowHeight);
            }
            DrawRow(row, g, labelsWidth, y + 8);
            y += rowHeight;
            shadeRow = !shadeRow;
        }
        // Draw the year labels
        int x = labelsWidth;
        for (int year = timeline.startYear; year <= timeline.endYear; year += 5)
        {
            string yearString = Convert.ToString(year);
            int width = (int)g.MeasureString(yearString, labelFont).Width;
            g.DrawString(yearString, labelFont, labelBrush, x - width / 2, y);
            x += 5 * TimelineRow.DEFAULT_HEIGHT;
        }

文本绘制“粗体”

我在绘制字符串时遇到了类似的问题。在我的情况下,首先清除带有背景色的图像已经解决了这个问题。

哇,这真的做到了。

使用 Graphics.Clear() 设置初始颜色:

Bitamp bmp = new Bitmap(...);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
// ... now draw with "g" ...