【问题标题】:How can I round off the edges of pie-chart slices?如何修圆饼图切片的边缘?
【发布时间】:2021-04-16 09:30:22
【问题描述】:

我有 C# 代码来使用每个切片的常规代码绘制饼图:

gr.FillPie(brFill, rect, start_angle, sweep_angle);
gr.DrawPie(penOutline, rect, start_angle, sweep_angle);

这很好用:问题是它看起来很无聊。我想得到如下效果;也就是说,保持它是二维的,但将边缘四舍五入。

我想我需要以某种方式使用路径渐变画笔,但我看过的示例都没有帮助。

感谢任何帮助或提示。

托尼·雷诺兹

【问题讨论】:

    标签: c# drawing pie-chart


    【解决方案1】:

    我在 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,然后绘制黑色轮廓。 示例结果在这里:

    我对这个效果很满意。 欢迎所有 cmets 和调整,如果其他人有办法使饼图更加生动,请分享!

    托尼·雷诺兹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-29
      • 2011-12-07
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多