使用C#画矢量图,然后导出到Word、Excel、Powerpoint中,并且能够再次被编辑。以下是解决过程:
首先应该确定在Office文档中可编辑图形使用的格式;学习了相关资料,了解到Office文档主要支持三种矢量图的格式:1、VML图形,2、WMF文件格式,3、EMF文件格式。由于VML图开一般使用HTML语言进行描述,不便于进行操作,因此决定采用WMF和EMF文件格式。
接下来的工作就是要让C#根据提供的数据生成WMF或EMF格式的矢量图形;学习了C#提供的GDI+绘图类库,GDI+可以绘制矢量图形,代码示例如下:
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
产生的图形如下:
放大后效果:
在Word 中编辑图形:
至此,实现了该软件的技术要求功能。
画个奥运五环
public
void
Graphics.DrawEllipse(
Pen pen,
Rectangle rect
)
canvas.DrawEllipse(
new
Pen(Color.Blue),
new
Rectangle(0, 0, 10, 10));
canvas.DrawEllipse(
new
Pen(Color.Black),
new
Rectangle(11, 0, 10, 10));
canvas.DrawEllipse(
new
Pen(Color.Red),
new
Rectangle(22, 0, 10, 10));
canvas.DrawEllipse(
new
Pen(Color.Yellow),
new
Rectangle(5, 5, 10, 10));
canvas.DrawEllipse(
new
Pen(Color.Green),
new
Rectangle(16, 5, 10, 10));
DoNet画圆
画圆可以用Graphics的DrawEllipse方法,
private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black, 3);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//奥运五环
g.DrawEllipse(pen, new Rectangle(30, 30, 50, 50));
g.DrawEllipse(pen, new Rectangle(70, 30, 50, 50));
g.DrawEllipse(pen, new Rectangle(110, 30, 50, 50));
g.DrawEllipse(pen, new Rectangle(50, 60, 50, 50));
g.DrawEllipse(pen, new Rectangle(90, 60, 50, 50));
//还是这个
for (int i = 1; i <= 5; i++)
{
g.DrawEllipse(pen, new Rectangle(200 + (5 - i) * 10, 30 + 10 * (5 - i), i * 20, i * 20));
}
g.Dispose();
pen.Dispose();
}
手动画圆或椭圆
- private Point startPoint;
- private bool beginDragging;
- public Form1()
- {
- InitializeComponent();
- this.DoubleBuffered = true;
- }
- private void Form1_MouseMove(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left && beginDragging)
- {
- circle.Size = new Size(circle.Size.Width + e.X - startPoint.X, circle.Size.Height + e.Y - startPoint.Y);
- startPoint = new Point(e.X, e.Y);
- }
- this.Invalidate();
- }
- private void Form1_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- startPoint = e.Location;
- beginDragging = true;
- this.Capture = true;
- circle = new Circle();
- circle.Location = e.Location;
- Circles.Add(circle);
- this.Cursor = System.Windows.Forms.Cursors.Cross;
- }
- }
- private void Form1_MouseUp(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left && beginDragging)
- {
- beginDragging = false;
- this.Capture = false;
- this.Cursor = System.Windows.Forms.Cursors.Default;
- }
- this.Invalidate();
- }
- private void Form1_Paint(object sender, PaintEventArgs e)
- {
- Graphics g = e.Graphics;
- foreach (Circle each in Circles)
- {
- g.DrawEllipse(Pens.Black, new Rectangle(each.Location, each.Size));
- }
- }
- private List<Circle> Circles = new List<Circle>();
- private Circle circle = new Circle();
- public class Circle
- {
- public int Radii;
- public Size Size;
- public Point Location;
- }
自动画圆
- //方法1
- private void button1_Click_1(object sender, EventArgs e)
- {
- Image im = new Bitmap(this.panel2.Width, this.panel2.Height);
- Graphics g = Graphics.FromImage(im);
- GraphicsPath gp = new GraphicsPath();
- Rectangle rec = new Rectangle(0, 0, 100, 100);
- gp.AddEllipse(rec);
- g.DrawEllipse(new Pen(Color.Red), rec);
- this.panel2.BackgroundImageLayout = ImageLayout.Stretch;
- this.panel2.BackgroundImage = im;
- }
- //方法2
- private void button3_Click(object sender, EventArgs e)
- {
- Graphics gra;
- Brush bush;
- gra = this.panel3.CreateGraphics();
- bush = new SolidBrush(Color.Red); //填充的颜色
- gra.FillEllipse(bush, 0, 0, 100, 100);//画填充椭圆的方法,x坐标、y坐标、宽、高,如果是100,则半径为50
- }
自动画矩形
- //方法1
- private void button2_Click(object sender, EventArgs e)
- {
- Image im = new Bitmap(this.panel1.Width,this.panel1.Height);
- Graphics g = Graphics.FromImage(im);
- GraphicsPath gp = new GraphicsPath();
- Rectangle rec = new Rectangle(new Point(0,0),new Size(100,100));
- gp.AddRectangle(rec);
- g.DrawRectangle(new Pen(Color.Red), rec);
- this.panel1.BackgroundImageLayout = ImageLayout.Stretch;
- this.panel1.BackgroundImage = im;
- }
- //方法2
- private void button4_Click(object sender, EventArgs e)
- {
- Graphics gra;
- Brush bush;
- gra = this.panel4.CreateGraphics();
- bush = new SolidBrush(Color.Red);
- gra.DrawRectangle(new Pen(bush,20), 0, 0, 100, 100);
- }
![](https://img-my.csdn.net/uploads/201211/17/1353134963_5622.jpg)