c#中画图与保存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中画图与保存相关的知识,希望对你有一定的参考价值。
想在C#能画直线,然后能记录点的坐标信息,而且画出的图能被保存能jpg或其他格式,请大家帮帮忙,主要解决这些问题:1、怎么画直线(事件,方法)2、怎么记录点3、怎么保存图像尽量详细点,本人是菜鸟。谢谢哈!
画直线:先弄一个画布出来,一般是picturebox,然后在画布上画。Graphics graphics = pictureBox1.CreateGraphics();
Point p1=new Point(12,15);
Point p2=new Point(0,0);
Pen p = new Pen(Color.Black, 1);
graphics.DrawLine(p,p1,p2);//画出p1p2线段。
记录点:可以用知道要存的点的个数的话,可以直接用Point数组,不知道要记录的个数的话,可以用List<Point>。
保存图片:
Image myimage = new Bitmap(pictureBox1.Width,pictureBox1.Height);
Graphics graphics = Graphics.FromImage(myimage);
Point p1 = new Point(100, 100);
Point p2 = new Point(0, 0);
graphics.Clear(Color.White);
graphics.DrawLine(Pens.Blue, p1, p2);
pictureBox1.Image = myimage;
myimage.Save("e:\\123.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
图片的格式由System.Drawing.Imaging.ImageFormat决定。 参考技术A GDI+
主要的类:Bitmap Graphics
C#画图——Graphics
C#要实现简单的画图功能可以利用Graphics这个类,要使用Graphics必需using命名空间System.Drawing(此名明空间下都是关于图形的操作)。首先创建画布:
Bitmap bmp = new Bitmap(1000, 800); Graphics g = Graphics.FromImage(bmp);
清除画布的背景色,并且指定颜色填充:
g.Clear(Color.White);
开始画图:
//画矩形 g.DrawRectangle(new Pen(Color.Red), new Rectangle(0, 0, 600, 400)); //填充扇形 g.FillPie(new SolidBrush(Color.Red), new Rectangle(100, 80, 200, 200), 0, 100); //在画布上写文字 g.DrawString("A", new Font("Times New Roman", 16), new SolidBrush(Color.Black), 250, 210);
下面给出完整代码:
1 public class GraphicsController : Controller 2 { 3 public ActionResult Index() 4 { 5 return View(); 6 } 7 [HttpGet] 8 public ActionResult CreateGraphics() 9 { 10 Bitmap bmp = new Bitmap(1000, 800); 11 //画布 12 Graphics g = Graphics.FromImage(bmp); 13 //清除画布背景色,并填充指定色 14 g.Clear(Color.White); 15 //画矩形 16 g.DrawRectangle(new Pen(Color.Red), new Rectangle(0, 0, 600, 400)); 17 //画刷 18 Brush bs = new SolidBrush(Color.Blue); 19 //填充扇形 20 g.FillPie(new SolidBrush(Color.Red), new Rectangle(100, 80, 200, 200), 0, 100); 21 g.FillPie(bs, new Rectangle(100, 80, 200, 200), 100, 100); 22 g.DrawPie(new Pen(bs), new Rectangle(100, 80, 200, 200), 200, 100);//画扇形 23 g.FillPie(new SolidBrush(Color.HotPink), new Rectangle(100, 80, 200, 200), 300, 60); 24 g.DrawString("A", new Font("Times New Roman", 16), new SolidBrush(Color.Black), 250, 210); 25 //抗锯齿 26 g.SmoothingMode = SmoothingMode.AntiAlias; 27 MemoryStream ms = new MemoryStream(); 28 try 29 { 30 bmp.Save(ms, ImageFormat.Gif); 31 return File(ms.ToArray(), @"image/Gif"); 32 } 33 catch (Exception) 34 { 35 return null; 36 } 37 } 38 }
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<img src="/Bitmap/CreateGraphics" width="1000" height="800" />
</div>
</body>
</html>
效果图(好像有点简陋(╯▽╰ )):
最后推荐一些前辈的总结(比我强太多了):
http://www.cnblogs.com/Jerry-Chou/archive/2012/03/20/2408064.html
http://www.cnblogs.com/Jerry-Chou/archive/2012/03/21/2409590.html
http://www.cnblogs.com/beyond0309/archive/2008/04/15/1155003.html验证码也可以用这种方式生成
以上是关于c#中画图与保存的主要内容,如果未能解决你的问题,请参考以下文章
C# System.Drawing.Graphics 画图后,如何保存一个低质量的图片,一个占用空间较小的图片