using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GDI_
{
// GDI+: Graphics Device Interface
//
public partial class Form1 : Form
{
//1.
#region 无参数构造
public Form1()
{
InitializeComponent();
// Graphics g= this.CreateGraphics();
// this.Paint += Form1_Paint;
this.panel1.Paint += Panel1_Paint;
this.panel2.Paint += Panel2_Paint;
this.panel3.Paint += Panel3_Paint;
this.panel4.Paint += Panel4_Paint;
this.panel5.Paint += Panel5_Paint;
this.panel6.Paint += Panel6_Paint;
this.panel7.Paint += Panel7_Paint;
this.panel8.Paint += Panel8_Paint;
this.panel9.Paint += Panel9_Paint;
this.panel10.Paint += Panel10_Paint;
this.panel11.Paint += Panel11_Paint;
}
#endregion
#region 画一个路径
private void Panel11_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SetQuality(g);
Brush brush = new SolidBrush(Color.Red);
GraphicsPath path = new GraphicsPath();
path.StartFigure();
path.AddLine(0, 0, 100, 0);
path.AddLine(100, 0, 100, 100);
StringFormat format = StringFormat.GenericTypographic;
path.AddString("你要加油", new FontFamily("微软雅黑"), 2, 10, new PointF(10, 10), format); //注意有些东西的字体是不能传进去的需要先给他赋值,比如, FontStyle.Italic是2
g.FillPath(brush, path);
}
#endregion
#region 画一个icon
private void Panel10_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SetQuality(g);
string path = Path.Combine(Environment.CurrentDirectory, "../../images/1.icon");
g.DrawIcon(new Icon(path), 10, 10);
}
#endregion
#region 画一个渐变色
private void Panel9_Paint(object sender, PaintEventArgs e)
{
//入手点主要在于我们能明白,画一个渐变色肯定是一个封闭的区域,如长方形,正方形
Graphics g = e.Graphics;
SetQuality(g);
Rectangle rect = new Rectangle(20, 50, 80, 80);
Brush brush = new LinearGradientBrush(rect, Color.Red, Color.Yellow, 255F);
g.FillRectangle(brush, rect);
}
#endregion
#region 画一个点状图
private void Panel8_Paint(object sender, PaintEventArgs e)
{
//先换一个线 然后设置成嗲点状的
Graphics g = e.Graphics;
SetQuality(g);
Pen pen = new Pen(Color.Red, 10);
pen.DashStyle = DashStyle.Dot;
// pen.Color= Color.Pink; 覆盖上面颜色
Point pnt = new Point(10, 10);
Point pt1 = new Point(10, 100);
g.DrawLine(pen, pnt, pt1);
}
#endregion
#region 画一个文字
private void Panel7_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SetQuality(g);
Brush brush = new SolidBrush(Color.Red);
g.DrawString("李淑婷", new Font("宋体", 18), brush, new PointF(((this.panel7.Width - Font.Size) / 2), ((this.panel7.Height - Font.Size) / 2)));
}
#endregion
#region 画一个曲线
private void Panel6_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SetQuality(g);
Pen pen = new Pen(Color.FromArgb(200, 178, 199), 10f);
PointF[] points = new PointF[] {
new Point(0,this.Height), //左上角
//这个画的是一个M
new PointF(this.panel6.Width/9F,this.panel6.Height/9F),
new PointF(this.panel6.Width/2F,this.panel6.Height/2F), //这个是中间的位置
new PointF (this.panel6.Width/9F*8,this.panel6.Height/9F),
new Point(this.panel6.Width,this.panel6.Height), // 右下角
};
g.DrawCurve(pen, points);
}
#endregion
#region 画一个饼状图
private void Panel5_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SetQuality(g);
#region 画一个空心的园
//Pen pen = new Pen(Color.Red);
//Pen pen1 = new Pen(Color.Green);
//Pen pen2 = new Pen(Color.Blue);
//Pen pen3 = new Pen(Color.Red);
RectangleF rect = new RectangleF(30,30,100.100);
//g.DrawPie(pen, new RectangleF(30, 30, 100, 100), 0, 90);
//g.DrawPie(pen1, new RectangleF(30, 30, 100, 100), 90, 90);
//g.DrawPie(pen2, new RectangleF(30, 30, 100, 100), 180, 90);
//g.DrawPie(pen3, new RectangleF(30, 30, 100, 100), 270, 90);
#endregion
//
//
//注意:填充的时候必须使用的是Brush而不是Pen
#region 画一个实心的饼状图
Brush brush = new SolidBrush(Color.Red);
Brush brush1 = new SolidBrush(Color.Green);
Brush brush2 = new SolidBrush(Color.Blue);
Brush brush3 = new SolidBrush(Color.Magenta);
g.FillPie(brush, new Rectangle(30, 30, 100, 100), 0, 90);
g.FillPie(brush1, new Rectangle(30, 30, 100, 100), 90, 90);
g.FillPie(brush2, new Rectangle(30, 30, 100, 100), 180, 90);
g.FillPie(brush3, new Rectangle(30, 30, 100, 100), 270, 90);
#endregion
}
#endregion
#region 画一个多边形
private void Panel4_Paint(object sender, PaintEventArgs e)
{
//画一个多边形
Graphics g = e.Graphics;
SetQuality(g);
Pen pen = new Pen(Color.Purple, 10F);
Point[] points = new Point[] {
new Point(20,20),
new Point(100,20),
new Point(100,100),
new Point(20,100)
};
g.DrawPolygon(pen, points);
}
#endregion
//
#region 画一个图片
private void Panel3_Paint(object sender, PaintEventArgs e)
{
//1.拿到画笔
Graphics g = e.Graphics;
string path = Path.Combine(Environment.CurrentDirectory, "../../images/2.jpg"); //拿到是bin目录下面的exe文件
Image image = Image.FromFile(path);
//在这边主要牵扯到一个图片缩放的问题
RectangleF destRect = new RectangleF(0, 0, this.panel3.Width, this.panel3.Height);
RectangleF srcRect = new RectangleF(0, 0, image.Width, image.Height);
g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel);
}
#endregion
#region 画出一个弧形
private void Panel2_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SetQuality(g);
Pen pen = new Pen(Color.Red);
Pen pen1 = new Pen(Color.Black);
RectangleF rect = new RectangleF(20, 20, 100, 100);
// g.DrawArc(pen,rect ,0,90);
g.DrawArc(pen, rect, 0, -180);
Point center = new Point(70, 100);
Point pt1 = new Point(20, 70);
Point pt2 = new Point(120, 70);
g.DrawLine(pen1, pt1, center);
g.DrawLine(pen1, pt2, center);
}
#endregion
#region 使用Drawline画出一个三角形状
private void Panel1_Paint(object sender, PaintEventArgs e)
{
// this.panel1.BorderStyle= BorderStyle.None;
//
Graphics g = e.Graphics; //画布拿到画笔
SetQuality(g);
//现在需要画一个三角形
Pen pen = new Pen(Color.Pink, 10);
// Rectangle rect = new Rectangle();
//g.DrawLine(pen ,0,0,0,100);
//g.DrawLine(pen, 0,100,100, 100);
//g.DrawLine(pen,); 连接线
//现在开始画一个线性的集合
Point[] points = new Point[]
{
new Point(20,20),
new Point(100,20),
new Point(55,100),
new Point(20,20),
new Point(100,20),
};
g.DrawLines(pen, points);
}
#endregion
//画一个四 作业
#region 线性更加丝滑
private static void SetQuality(Graphics g)
{
//这写方法是让线更加的光滑
g.SmoothingMode = SmoothingMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
}
#endregion
//private void Form1_Paint(object sender, PaintEventArgs e)
//{
// Console.WriteLine("2");
//}
//重绘的方法
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
// Graphics g3 = Graphics.FromImage(new Image());
// g.dra
}
}
}
//
//
SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer | // 使用双缓冲机制, .net1.1中DoubleBuffer属性
ControlStyles.ResizeRedraw |
ControlStyles.Selectable |
ControlStyles.SupportsTransparentBackColor |
ControlStyles.UserPaint, true);
这个一般在自定义控件的时候某些地方会闪朔,会用到这个地方防止闪烁的