C#GDI的基本属性

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);

  这个一般在自定义控件的时候某些地方会闪朔,会用到这个地方防止闪烁的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值