struct PieInfo
{
public Color Color;
public uint Number;
public PieInfo(Color AColor, uint ANumber)
{
Color = AColor;
Number = ANumber;
}
}
///<summary>
///绘制饼形统计图
///</summary>
///<param name="AGraphics">绘制的画板</param>
///<param name="ARect">圆形的大小</param>
///<param name="APies">每个颜色所占数量</param>
private void DrawPies(Graphics AGraphics, Rectangle ARect, params PieInfo[] APies)
{
if (AGraphics == null) return;
uint vSum = 0;
foreach (PieInfo vPieInfo in APies)
vSum += vPieInfo.Number;
float vAngle = 0;
foreach (PieInfo vPieInfo in APies)
{
if (vPieInfo.Number == 0) continue;
float vAngleOffset = ((float)vPieInfo.Number / vSum) * 360;
AGraphics.FillPie(new SolidBrush(vPieInfo.Color),
ARect, vAngle, vAngleOffset);
vAngle += vAngleOffset;
}
}
private void button1_Click(object sender, EventArgs e)
{
//如红允占%,绿色占%,黄色占%,黑色占%
Graphics vGraphics = CreateGraphics();
DrawPies(vGraphics, new Rectangle(0, 0, 200, 200),
new PieInfo(Color.Red, 30),
new PieInfo(Color.Green, 35),
new PieInfo(Color.Yellow, 20),
new PieInfo(Color.Black, 15));
vGraphics.Dispose();
}