C# 绘制矢量图形
2012-11-17 14:45
966 查看
使用C#画矢量图,然后导出到Word、Excel、Powerpoint中,并且能够再次被编辑。以下是解决过程:
首先应该确定在Office文档中可编辑图形使用的格式;学习了相关资料,了解到Office文档主要支持三种矢量图的格式:1、VML图形,2、WMF文件格式,3、EMF文件格式。由于VML图开一般使用HTML语言进行描述,不便于进行操作,因此决定采用WMF和EMF文件格式。
接下来的工作就是要让C#根据提供的数据生成WMF或EMF格式的矢量图形;学习了C#提供的GDI+绘图类库,GDI+可以绘制矢量图形,代码示例如下:
/// <summary>
/// 导出为 Emf 或 Wmf 文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>是否成功</returns>
private bool Export(string filePath)
{
try
{
Bitmap bmp = new Bitmap(220,220);
Graphics gs = Graphics.FromImage(bmp);
Metafile mf = new Metafile(filePath,gs.GetHdc());
Graphics g = Graphics.FromImage(mf);
Draw(g);
g.Save();
g.Dispose();
mf.Dispose();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 绘制图形
/// </summary>
/// <param name="g">用于绘图的Graphics对象</param>
private void Draw(Graphics g)
{
HatchBrush hb = new HatchBrush(HatchStyle.LightUpwardDiagonal, Color.Black, Color.White);
g.FillEllipse(Brushes.Gray,10f,10f,200,200);
g.DrawEllipse(new Pen(Color.Black,1f),10f,10f,200,200);
g.FillEllipse(hb,30f,95f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),30f,95f,30,30);
g.FillEllipse(hb,160f,95f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),160f,95f,30,30);
g.FillEllipse(hb,95f,30f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),95f,30f,30,30);
g.FillEllipse(hb,95f,160f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),95f,160f,30,30);
g.FillEllipse(Brushes.Blue,60f,60f,100,100);
g.DrawEllipse(new Pen(Color.Black,1f),60f,60f,100,100);
g.FillEllipse(Brushes.BlanchedAlmond,95f,95f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),95f,95f,30,30);
g.DrawRectangle(new Pen(System.Drawing.Brushes.Blue,0.1f),6,6,208,208);
g.DrawLine(new Pen(Color.Black,0.1f),110f,110f,220f,25f);
g.DrawString("剖面图",new Font("宋体",9f),Brushes.Green,220f,20f);
}
产生的图形如下:
放大后效果:
在Word 中编辑图形:
至此,实现了该软件的技术要求功能。
画个奥运五环
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();
}
asp.net C# 画圆画矩形
手动画圆或椭圆
自动画圆
自动画矩形
分类: DotNet
专题
首先应该确定在Office文档中可编辑图形使用的格式;学习了相关资料,了解到Office文档主要支持三种矢量图的格式:1、VML图形,2、WMF文件格式,3、EMF文件格式。由于VML图开一般使用HTML语言进行描述,不便于进行操作,因此决定采用WMF和EMF文件格式。
接下来的工作就是要让C#根据提供的数据生成WMF或EMF格式的矢量图形;学习了C#提供的GDI+绘图类库,GDI+可以绘制矢量图形,代码示例如下:
/// <summary>
/// 导出为 Emf 或 Wmf 文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>是否成功</returns>
private bool Export(string filePath)
{
try
{
Bitmap bmp = new Bitmap(220,220);
Graphics gs = Graphics.FromImage(bmp);
Metafile mf = new Metafile(filePath,gs.GetHdc());
Graphics g = Graphics.FromImage(mf);
Draw(g);
g.Save();
g.Dispose();
mf.Dispose();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 绘制图形
/// </summary>
/// <param name="g">用于绘图的Graphics对象</param>
private void Draw(Graphics g)
{
HatchBrush hb = new HatchBrush(HatchStyle.LightUpwardDiagonal, Color.Black, Color.White);
g.FillEllipse(Brushes.Gray,10f,10f,200,200);
g.DrawEllipse(new Pen(Color.Black,1f),10f,10f,200,200);
g.FillEllipse(hb,30f,95f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),30f,95f,30,30);
g.FillEllipse(hb,160f,95f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),160f,95f,30,30);
g.FillEllipse(hb,95f,30f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),95f,30f,30,30);
g.FillEllipse(hb,95f,160f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),95f,160f,30,30);
g.FillEllipse(Brushes.Blue,60f,60f,100,100);
g.DrawEllipse(new Pen(Color.Black,1f),60f,60f,100,100);
g.FillEllipse(Brushes.BlanchedAlmond,95f,95f,30,30);
g.DrawEllipse(new Pen(Color.Black,1f),95f,95f,30,30);
g.DrawRectangle(new Pen(System.Drawing.Brushes.Blue,0.1f),6,6,208,208);
g.DrawLine(new Pen(Color.Black,0.1f),110f,110f,220f,25f);
g.DrawString("剖面图",new Font("宋体",9f),Brushes.Green,220f,20f);
}
产生的图形如下:
放大后效果:
在Word 中编辑图形:
至此,实现了该软件的技术要求功能。
画个奥运五环
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();
}
asp.net C# 画圆画矩形
手动画圆或椭圆
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); }
分类: DotNet
专题
相关文章推荐
- C# 绘制矢量图形 [原创]
- [转] C#中绘制矢量图形
- C# 绘制矢量图形
- C# 绘制矢量图形
- C# 绘制矢量图形
- 绘制图形C#
- SVG(可缩放矢量图形)绘制工具Method Draw
- C#调用Illustrator CS4生成系统所有字体列表并保存为AI文件(Illustrator矢量图形编程之4)
- C# winform 清除由GDI绘制出来的所有线条或图形
- C#的图形绘制基础知识
- 源码推荐:一个使用C#绘制图形引擎的Framework
- vb.net 与c# 窗体绘制水晶按钮图形
- C#学习笔记 :图形绘制基础
- C# 学习笔记一(图形绘制基础1 GDI+)
- Silverlight开发历程—(用C#来绘制图形)
- C# 实现完整功能的截图控件(1)-实现绘图工具栏控件 控件实现了截图、绘制矩形、圆形、箭头、线条、文字,还需要可以撤销绘制步骤、保存图形等功能,基本实现了跟QQ2008截图一样的功能,还可以更
- OpenGL学习三:绘制矢量图形模型
- 矢量图形绘制算法浅析
- c# 绘制图形
- SVG(可缩放矢量图形)基本图形绘制方法与path路径命令