C#GDI绘图编程

czjasasas 2017-06-04 04:42:05
C#中饼图可用单色刷绘制,如何将构成饼图的每个扇形分别用不同的画刷(如:网络、渐变、纹理刷)填充?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace 饼图
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
this.Refresh();
int boynum = int.Parse(textBox1.Text);
int girlnum = int.Parse(textBox2.Text);
float boy = (float) boynum / (boynum + girlnum);
float girl = (float) girlnum / (boynum + girlnum);
SolidBrush sb1 = new SolidBrush(Color.Blue);
SolidBrush sb2 = new SolidBrush(Color.Red);
Rectangle rect=new Rectangle(20,80,80,80);
g.FillPie(sb1, rect, 0, -boy * 360);
g.FillPie(sb2, rect, -boy * 360, -girl * 360);
Font f=new Font("宋体",10,FontStyle.Bold);
Point pt1=new Point(130,100);
Point pt2=new Point(130,120);
boy = (float)Math.Round(boy * 100, 2);
girl= (float) Math.Round(girl * 100, 2);
g.DrawString("男 = " + boy.ToString()+"%", f, sb1, pt1);
g.DrawString("女 = " + girl.ToString()+"%", f, sb2, pt2);

sb1.Dispose();
sb2.Dispose();
g.Dispose();
}
}
}
...全文
190 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuggzu 2017-06-05
  • 打赏
  • 举报
回复
填充我记得有个fillregion()函数用于填充区域,不论是规则还是不规则的,画刷也是可定义的。但前提是找到该封闭区域中的点,所以难点也在这,楼主的解决点也在这。
赵4老师 2017-06-05
  • 打赏
  • 举报
回复
请楼主移驾C#论坛。
xuzuning 2017-06-05
  • 打赏
  • 举报
回复
        protected override void OnPaint(PaintEventArgs e)
{
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;

var angle = new int[] { 0, 60, 120, 180, 240, 300 };
var rect = new Rectangle(20, 10, 250, 250);
var brush = new List<Brush>()
{
new HatchBrush(HatchStyle.DiagonalCross, Color.Chocolate, Color.Red),
new HatchBrush(HatchStyle.Horizontal, Color.Chocolate, Color.Green),
new LinearGradientBrush(rect, Color.White, Color.Blue, LinearGradientMode.Vertical),
new HatchBrush(HatchStyle.DiagonalCross, Color.Chocolate, Color.Yellow),
new HatchBrush(HatchStyle.DashedVertical, Color.Chocolate, Color.Green),
new LinearGradientBrush(rect, Color.Red,Color.Yellow,LinearGradientMode.BackwardDiagonal),
new HatchBrush(HatchStyle.Horizontal, Color.Chocolate, Color.Green),
};

for (var i = 0; i < angle.Length; i++)
{
g.FillPie(brush[i], rect, angle[i], 60);
}
}

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧