Graphics類

一:Graphics類的方法

1.  繪製方法

繪製橢圓

private void Form1_Paint(object sender,

      System.Windows.Forms.PaintEventArgs e)

    {

      Graphics g = e.Graphics ;

      // Create pens

      Pen redPen = new Pen(Color.Red, 6 );

      Pen bluePen = new Pen(Color.Blue, 4 );

      Pen greenPen = new Pen(Color.Green, 2);

      // Create a rectangle

      Rectangle rect =

        new Rectangle(80, 80, 50, 50);

      // Draw ellipses

      g.DrawEllipse(greenPen,

        100.0F, 90.0F, 10.0F, 30.0F );

      g.DrawEllipse(redPen, rect );      

      g.DrawEllipse(bluePen, 60, 60, 90, 90);  

      g.DrawEllipse(greenPen,

        40.0F, 40.0F, 130.0F, 130.0F );  

      // Dispose

      redPen.Dispose();

      greenPen.Dispose();

      bluePen.Dispose();

}

 

 

2. 繪製文本

private void Form1_Paint(object sender,

      System.Windows.Forms.PaintEventArgs e)

    {

      // Create brushes

      SolidBrush blueBrush = new SolidBrush(Color.Blue);

      SolidBrush redBrush = new SolidBrush(Color.Red);

      SolidBrush greenBrush = new SolidBrush(Color.Green);

      // Create a rectangle

      Rectangle rect = new Rectangle(20, 20, 200, 100);

      // The text to be drawn

      String drawString = "Hello GDI+ World!";

      // Create a Font

      Font drawFont = new Font("Verdana", 14);

      float x = 100.0F;

      float y =  100.0F;

      // String format

      StringFormat drawFormat = new StringFormat();

      // Set string format flag to direction vertical

      // which draws text vertical

      drawFormat.FormatFlags =

        StringFormatFlags.DirectionVertical;

      // Draw string

      e.Graphics.DrawString("Drawing text",

        new Font("Tahoma", 14), greenBrush, rect);

      e.Graphics.DrawString(drawString,

        new Font("Arial", 12), redBrush, 120, 140);

      e.Graphics.DrawString(drawString, drawFont,

        blueBrush, x, y, drawFormat);

      // Dispose

      blueBrush.Dispose();

      redBrush.Dispose();

      greenBrush.Dispose();

      drawFont.Dispose();

    }

3. 填充方法

 填充矩形

  private void Form1_Paint(object sender,

      System.Windows.Forms.PaintEventArgs e)

    {

      // Create brushes

      SolidBrush blueBrush = new SolidBrush(Color.Blue);

      SolidBrush redBrush = new SolidBrush(Color.Red);

      // Create a rectangle

      Rectangle rect = new Rectangle(10, 20, 100, 50);     

      // Fill rectangle

      e.Graphics.FillRectangle(new HatchBrush

        (HatchStyle.BackwardDiagonal,

        Color.Yellow, Color.Black),

        rect); 

      e.Graphics.FillRectangle(blueBrush,

        new Rectangle(150, 20, 50, 100));

    //  e.Graphics.FillRectangles(redBrush, rectArray);

      // Dispose

      blueBrush.Dispose();

      redBrush.Dispose();

}

 

4. 繪製圖像

 

         private void Form1_Paint(object sender,

      System.Windows.Forms.PaintEventArgs e)

    {

      // Create an Image from a file

      Image newImage =

        Image.FromFile("dnWatcher.gif");

      try

      {

        // Draw image

        e.Graphics.DrawImage(newImage,

          this.ClientRectangle);

      }

      catch (Exception ex)

      {

        MessageBox.Show(ex.Message.ToString());

      }

}

 

5. GDI+ Painter

首先在類級上定義一些私有變量。

下一步是初始化對象。在form-load 事件處理程序中,創建一個位圖並從此位圖創建一個Graphics對象,以代表整個窗體。通過調用Graphics.Clear 方法將此對象的背景色設置爲窗體的背景色。在加載窗體時在創建一個Pen對象和一個Brush對象。

private void Form1_Load(object sender,

      System.EventArgs e)

    {

      // Get the full size of the form

      fullSize = SystemInformation

        .PrimaryMonitorMaximizedWindowSize;

      // Create a bitmap using full size

      bitmap = new Bitmap(fullSize.Width,

        fullSize.Height);

      // Create a Graphics object from Bitmap

      curGraphics = Graphics.FromImage(bitmap);

      // Set background color as form's color

      curGraphics.Clear(this.BackColor);

      // Create a new pen and brush as

      // default pen and brush

      curPen = new Pen(Color.Black);

      curBrush = new SolidBrush(Color.Black);

}

 

6. 旋轉體

public MainClass()

     {

         Xmat=new XRotate(changex);

         Ymat=new YRotate(changey);

         Zmat=new ZRotate(changez);

         Size=new Size(400,260);

         Text = "Hellllo 3D!";

         FormBorderStyle=FormBorderStyle.FixedToolWindow;

         MaximizeBox=false;

         Button b1=new Button();

         b1.Text="Add X axis Speed";

         b1.Size=new Size(115,25);

         b1.Click+=new EventHandler(moreX);

         Controls.Add(b1);

         Button b2=new Button();

         b2.Text="Add Y axis Speed";

         b2.Size=new Size(115,25);

         b2.Location=new Point(0,25);

         b2.Click+=new EventHandler(moreY);

         Controls.Add(b2);

         Button b3=new Button();

         b3.Text="Add Z axis Speed";

         b3.Size=new Size(115,25);

         b3.Location=new Point(0,50);

         b3.Click+=new EventHandler(moreZ);

         Controls.Add(b3);

         Button b4=new Button();

         b4.Text="Less X axis Speed";

         b4.Size=new Size(115,25);

         b4.Location=new Point(0,75);

         b4.Click+=new EventHandler(lessX);

         Controls.Add(b4);

         Button b5=new Button();

         b5.Text="Less Y axis Speed";

         b5.Size=new Size(115,25);

         b5.Location=new Point(0,100);

         b5.Click+=new EventHandler(lessY);

         Controls.Add(b5);

         Button b6=new Button();

         b6.Text="Less Z axis Speed";

         b6.Size=new Size(115,25);

         b6.Location=new Point(0,125);

         b6.Click+=new EventHandler(lessZ);

         Controls.Add(b6);

         b7.Text="Stop !!!";

         b7.Size=new Size(115,25);

         b7.Location=new Point(0,150);

         b7.Click+=new EventHandler(Stop);

         Controls.Add(b7);

         RadioButton b8=new RadioButton();

         b8.Text="CUBE";

         b8.Size=new Size(195,25);

         b8.Location=new Point(250,210);

         b8.BackColor=Color.White;

         b8.Checked=false;

         b8.CheckedChanged+=new EventHandler(shapeCube);

         Controls.Add(b8);

         RadioButton b9=new RadioButton();

         b9.Text="Sphere";

         b9.Checked=false;

         b9.Size=new Size(75,25);

         b9.BackColor=Color.White;

         b9.Location=new Point(115,210);

         b9.CheckedChanged+=new EventHandler(shapeSphere);

         Controls.Add(b9);

         RadioButton b10=new RadioButton();

         b10.Text="Axis";

         b10.Checked=true;

         b10.Size=new Size(115,25);

         b10.BackColor=Color.White;

         b10.Location=new Point(190,210);

         b10.CheckedChanged+=new EventHandler(shapeAxis);

         Controls.Add(b10);

         t1=new Label();

         t2=new Label();

         t3=new Label();

         t1.Size=new Size(115,20);

         t2.Size=new Size(115,20);

         t3.Size=new Size(115,20);

         t1.Location=new Point(0,175);

         t2.Location=new Point(0,195);

         t3.Location=new Point(0,215);

         t1.BackColor=Color.White;

         t2.BackColor=Color.White;

         t3.BackColor=Color.White;

         Controls.Add(t1);

         Controls.Add(t2);

         Controls.Add(t3);

        

         SetStyle(ControlStyles.AllPaintingInWmPaint, true);

         SetStyle(ControlStyles.DoubleBuffer, true);

        

         Vector z=new Vector(250,105,1000);

         Vector[] points1=new Vector[4];

         Vector[] points2=new Vector[4];

         Vector[] points3=new Vector[4];

         Vector[] points4=new Vector[4];

        

         Polygon poly1,poly2,poly3,poly4;

        

         // building the axis shape;

         points1[0]=new Vector(-100,0,0);

         points1[1]=new Vector(100,0,0);

        

         points2[0]=new Vector(0,-100,0);

         points2[1]=new Vector(0,100,0);

        

         points3[0]=new Vector(0,0,-100);    

         points3[1]=new Vector(0,0,100);

         poly1=new Polygon(1000,z,points1[0],points1[1]);

         poly2=new Polygon(1000,z,points2[0],points2[1]);

         poly3=new Polygon(1000,z,points3[0],points3[1]);

         Axis=new Shape3D(poly1,poly2,poly3);

        

         // building the Cube shape;

         points1[0]=new Vector(0,0,50);

         points1[1]=new Vector(0,50,50);

         points1[2]=new Vector(50,50,50);

         points1[3]=new Vector(50,0,50);

         poly1=new Polygon(1000,z,points1);

         poly1=poly1.Transpose(new Vector(-5,-5,-30));

        

        

         points2[0]=new Vector(0,0,50);

         points2[1]=new Vector(0,0,100);

         points2[2]=new Vector(0,50,100);

         points2[3]=new Vector(0,50,50);

         poly2=new Polygon(1000,z,points2);

         poly2=poly2.Transpose(new Vector(-5,-5,-30));

    

         points3[0]=new Vector(0,0,100);

         points3[1]=new Vector(0,50,100);

         points3[2]=new Vector(50,50,100);

         points3[3]=new Vector(50,0,100);

         poly3=new Polygon(1000,z,points3);

         poly3=poly3.Transpose(new Vector(-5,-5,-30));

        

         points4[0]=new Vector(50,0,50);

         points4[1]=new Vector(50,0,100);

         points4[2]=new Vector(50,50,100);

         points4[3]=new Vector(50,50,50);

         poly4=new Polygon(1000,z,points4);

         poly4=poly4.Transpose(new Vector(-5,-5,-30));

         Cube=new Shape3D(poly1,poly2,poly3,poly4);

        

         // building the Cube shape;

         Polygon[] p = new Polygon[130];

         poly1=poly1.Transpose(new Vector(-30,-30,-100));

         for (int count=0;count<p.Length;count++)

         {

              p[count]=poly1.Rotate(new ZRotate(System.Math.PI/20*count)).Rotate(new XRotate(System.Math.PI/60*count)).Rotate(new YRotate(System.Math.PI/180*count));

         }

         Circle=new Shape3D(p);

        

        

         this.Paint+=new System.Windows.Forms.PaintEventHandler(MyPaint);

         this.Click+=new EventHandler(MyClick);

                  

        

         currentShape=Axis;

        

         tm=new Timer();

         tm.Interval=10;

         tm.Tick+=new EventHandler(tmEvent);

         tm.Start();       

     }

    

 

     private void shapeSphere(object sender, System.EventArgs e)

     {

         currentShape=Circle;

         Invalidate(new Rectangle(135,0,235,210));

     }

     private void shapeCube(object sender, System.EventArgs e)

     {

         currentShape=Cube;

         Invalidate(new Rectangle(135,0,235,210));

     }

     private void shapeAxis(object sender, System.EventArgs e)

     {

         currentShape=Axis;

         Invalidate(new Rectangle(135,0,235,210));

     }

    

     private void moreX(object sender, System.EventArgs e)

     {

         changex+=0.006F;

         Xmat=new XRotate(changex);

     }

     private void moreY(object sender, System.EventArgs e)

     {

         changey+=0.006F;

         Ymat=new YRotate(changey);

     }

     private void moreZ(object sender, System.EventArgs e)

     {

         changez+=0.006F;

         Zmat=new ZRotate(changez);

     }

     private void lessX(object sender, System.EventArgs e)

     {

         changex-=0.006F;

         Xmat=new XRotate(changex);

     }

     private void lessY(object sender, System.EventArgs e)

     {

         changey-=0.006F;

         Ymat=new YRotate(changey);

     }

     private void lessZ(object sender, System.EventArgs e)

     {

         changez-=0.006F;

         Zmat=new ZRotate(changez);

     }

     private void Stop(object sender, System.EventArgs e)

     {

         stop=!stop;

         if (stop)

         {

              tm.Stop();

              b7.Text="Continue";

         }

         else

         {

              tm.Start();

              b7.Text="Stop!";

         }

     }

     private void tmEvent(object sender, System.EventArgs e)

     {

         Invalidate(new Rectangle(135,0,235,210));

     }

    

     public void MyClick(object sender, EventArgs e)

     {

         changey=-changey;     

         changex=-changex;     

         changez=-changez; 

         Xmat=new XRotate(changex);

         Ymat=new YRotate(changey);

         Zmat=new ZRotate(changez);

     }

    

     public void MyPaint(object sender, PaintEventArgs e)

     {

         t1.Text="X speed: "+changex.ToString();

         t2.Text="Y speed: "+changey.ToString();

         t3.Text="Z speed: "+changez.ToString();

         currentShape=currentShape.Rotate(Zmat).Rotate(Xmat).Rotate(Ymat);

         currentShape.Draw(e.Graphics);

     }

 

     private void InitializeComponent()

     {

         //

         // MainClass

         //

         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

         this.ClientSize = new System.Drawing.Size(416, 309);

         this.Name = "MainClass";

 

}

 

 

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章