文字绘图 "bold"
Text drawing "bold"
所以我正在编写一个生成图表并将其保存为 PNG 的程序。根据我的阅读,如果我绘制到 window,它不会这样,但我没有那样做。
问题是,当我将用于绘制标签的画笔传递给另一种方法进行绘制时,有时文本看起来很粗。此外,Y 坐标似乎与它有关,因为它发生在我正在绘制的图表的每一行上。而且它也不是一个很好的大胆,它就像一个坚韧不拔、凌乱的大胆。有人建议将文本渲染提示更改为抗锯齿,它解决了 "bolding" 问题,但它看起来不如 ClearType。
请注意 none 如果我在不传递画笔的情况下以一种方法完成所有操作,就会发生这种情况,这是最令人费解的部分。有什么想法吗?
下面是一些代码:
// 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;
}
我在绘制字符串时遇到过类似的问题。在我的例子中,首先用背景颜色清除图像已经解决了这个问题。
Wow, that actually did it.
使用Graphics.Clear()设置初始颜色:
Bitamp bmp = new Bitmap(...);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
// ... now draw with "g" ...
所以我正在编写一个生成图表并将其保存为 PNG 的程序。根据我的阅读,如果我绘制到 window,它不会这样,但我没有那样做。
问题是,当我将用于绘制标签的画笔传递给另一种方法进行绘制时,有时文本看起来很粗。此外,Y 坐标似乎与它有关,因为它发生在我正在绘制的图表的每一行上。而且它也不是一个很好的大胆,它就像一个坚韧不拔、凌乱的大胆。有人建议将文本渲染提示更改为抗锯齿,它解决了 "bolding" 问题,但它看起来不如 ClearType。
请注意 none 如果我在不传递画笔的情况下以一种方法完成所有操作,就会发生这种情况,这是最令人费解的部分。有什么想法吗?
下面是一些代码:
// 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;
}
我在绘制字符串时遇到过类似的问题。在我的例子中,首先用背景颜色清除图像已经解决了这个问题。
Wow, that actually did it.
使用Graphics.Clear()设置初始颜色:
Bitamp bmp = new Bitmap(...);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
// ... now draw with "g" ...