如何圆化饼图切片的边缘?
How can I round off the edges of pie-chart slices?
我有 C# 代码可以使用每个切片的常规代码绘制饼图:
gr.FillPie(brFill, rect, start_angle, sweep_angle);
gr.DrawPie(penOutline, rect, start_angle, sweep_angle);
这很好用:问题是它看起来很无聊。我想得到如下效果;也就是说,保持它是二维的,但将边缘四舍五入。
我想我需要以某种方式使用路径渐变画笔,但 none 我看过的示例有所帮助。
感谢任何帮助或提示。
托尼·雷诺兹
我在 11 天前发布了这篇文章,希望有人能帮我完成我的工作。我现在意识到我错了,我改过自新了。
我尝试使用 ControlPaint.Dark() 和 Light() 绘制阴影和高光,但效果不佳。最后我决定,由于大多数饼图的颜色范围有限,我应该设置一系列带有着色和阴影的完整圆盘,并根据需要裁剪扇区。
下面是一些样片:
然后我设置了一个等效的 FillPie 方法,如下所示。
private static void FillImagePie(Graphics gr, Bitmap bm, Rectangle rect,
float startAngle, float sweepAngle)
// Display a pie slice of a background image.
{
// Create a clipping Region
GraphicsPath pathClip = new GraphicsPath();
pathClip.AddPie(rect, startAngle, sweepAngle);
Region regionClip = new Region(pathClip);
// Use region to clip image to the pie sector
gr.Clip = regionClip;
// Draw the image portion
gr.DrawImage(bm, rect);
// Clean up
gr.ResetClip();
regionClip.Dispose();
pathClip.Dispose();
}
这需要一张光盘位图 bm,设置一个饼形剪辑区域并绘制图像。
然后我需要一个可以从窗体的 Paint 重载调用的控制例程。
在饼图只有一个类别的特殊情况下,显示整个圆盘。否则每个扇区被轮流采用。
我在实践中发现轮廓看起来参差不齐,所以我先用黑色笔刷填充该扇区,然后调用 FillImagePie,然后绘制黑色轮廓。
样本结果在这里:
我对这个效果很满意。
欢迎所有评论和调整,如果其他人有办法使饼图更加生动,请分享!
托尼·雷诺兹
我有 C# 代码可以使用每个切片的常规代码绘制饼图:
gr.FillPie(brFill, rect, start_angle, sweep_angle);
gr.DrawPie(penOutline, rect, start_angle, sweep_angle);
这很好用:问题是它看起来很无聊。我想得到如下效果;也就是说,保持它是二维的,但将边缘四舍五入。
我想我需要以某种方式使用路径渐变画笔,但 none 我看过的示例有所帮助。
感谢任何帮助或提示。
托尼·雷诺兹
我在 11 天前发布了这篇文章,希望有人能帮我完成我的工作。我现在意识到我错了,我改过自新了。
我尝试使用 ControlPaint.Dark() 和 Light() 绘制阴影和高光,但效果不佳。最后我决定,由于大多数饼图的颜色范围有限,我应该设置一系列带有着色和阴影的完整圆盘,并根据需要裁剪扇区。
下面是一些样片:
然后我设置了一个等效的 FillPie 方法,如下所示。
private static void FillImagePie(Graphics gr, Bitmap bm, Rectangle rect,
float startAngle, float sweepAngle)
// Display a pie slice of a background image.
{
// Create a clipping Region
GraphicsPath pathClip = new GraphicsPath();
pathClip.AddPie(rect, startAngle, sweepAngle);
Region regionClip = new Region(pathClip);
// Use region to clip image to the pie sector
gr.Clip = regionClip;
// Draw the image portion
gr.DrawImage(bm, rect);
// Clean up
gr.ResetClip();
regionClip.Dispose();
pathClip.Dispose();
}
这需要一张光盘位图 bm,设置一个饼形剪辑区域并绘制图像。
然后我需要一个可以从窗体的 Paint 重载调用的控制例程。 在饼图只有一个类别的特殊情况下,显示整个圆盘。否则每个扇区被轮流采用。 我在实践中发现轮廓看起来参差不齐,所以我先用黑色笔刷填充该扇区,然后调用 FillImagePie,然后绘制黑色轮廓。 样本结果在这里:
我对这个效果很满意。 欢迎所有评论和调整,如果其他人有办法使饼图更加生动,请分享!
托尼·雷诺兹