Csharp/CSharp Tutorial/2D/Graphics

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Create Graphics from Form object

<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms;

class Scribble: Form {

    bool  bTracking;
    Point ptLast;
  
    public static void Main()
    {
         Application.Run(new Scribble());
    }
    public Scribble()
    {
         Text = "Scribble";
    }
    protected override void OnMouseDown(MouseEventArgs mea)
    {
         if (mea.Button != MouseButtons.Left)
              return;
  
         ptLast = new Point(mea.X, mea.Y);
         bTracking = true;
    }
    protected override void OnMouseMove(MouseEventArgs mea)
    {
         if (!bTracking)
              return;
  
         Point ptNew = new Point(mea.X, mea.Y);
         
         Graphics grfx = CreateGraphics();
         grfx.DrawLine(new Pen(ForeColor), ptLast, ptNew);
         grfx.Dispose();
  
         ptLast = ptNew;
    }
    protected override void OnMouseUp(MouseEventArgs mea)
    {
         bTracking = false;
    }

}</source>

Double Buffering Example

<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Windows.Forms;

 class Form1 : Form
 {
   public Form1()
   {
   }
   protected override void OnPaint(PaintEventArgs e)
   {
     Graphics displayGraphics = e.Graphics;
     Random r = new Random();
     Image i = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
     Graphics g = Graphics.FromImage(i);
     g.FillRectangle(Brushes.White, ClientRectangle);
     for (int x = 0; x < ClientRectangle.Width; x++)
     {
       for (int y = 0; y < ClientRectangle.Height; y += 10)
       {
         Color c = Color.FromArgb(r.Next(255), r.Next(255),r.Next(255));
         Pen p = new Pen(c, 1);
         g.DrawLine(p, new Point(0, 0), new Point(x, y));
         g.DrawLine(p, new Point(10, 10), new Point(x, y));
         g.DrawLine(p, new Point(20, 10), new Point(x, y));
         g.DrawLine(p, new Point(30, 10), new Point(x, y));
         g.DrawLine(p, new Point(40, 10), new Point(x, y));
         g.DrawLine(p, new Point(50, 10), new Point(x, y));
         g.DrawLine(p, new Point(60, 10), new Point(x, y));
         g.DrawLine(p, new Point(70, 10), new Point(x, y));
         g.DrawLine(p, new Point(80, 10), new Point(x, y));
         g.DrawLine(p, new Point(90, 10), new Point(x, y));
         p.Dispose();
       }
     }
     displayGraphics.DrawImage(i, ClientRectangle);
     i.Dispose();
   }
   [STAThread]
   static void Main()
   {
     Application.EnableVisualStyles();
     Application.Run(new Form1());
   }
 }</source>

Draw along with the Tab

<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   Font f = new Font("Times New Roman", 12);
   Font bf = new Font(f, FontStyle.Bold);
   StringFormat sf = new StringFormat();
   float[] ts = { 10.0f, 70.0f, 100.0f, 90.0f };
   sf.SetTabStops(0.0f, ts);
   string s1 = "\tA\tAA\tAAA\tAAAA";
   string s2 = "\tAAAA\tAAA\tAA\tA";
   string s3 = "\tAAAAAAAA\tAAAAAAA\tAAAAAA\tAAAAA\n\tAAAA\tAAA\tAA\tAA";
   g.DrawString(s1, bf, Brushes.Black, 20, 20, sf);
   g.DrawString(s2, f, Brushes.Blue, 20, 20 + bf.Height, sf);
   g.DrawString(s3, f, Brushes.Blue, 20,
                     20 + bf.Height + f.Height, sf);
   f.Dispose();
   bf.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}</source>

Draw String

<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; class PaintHello {

    public static void Main()
    {
         Form form      = new Form();
         form.Text      = "Paint Hello";
         form.BackColor = Color.White;
         form.Paint    += new PaintEventHandler(MyPaintHandler);
  
         Application.Run(form);
    }
    static void MyPaintHandler(object objSender, PaintEventArgs pea)
    {
         Form     form = (Form)objSender;
         Graphics graphics = pea.Graphics;
  
         graphics.DrawString("Hello, world!", form.Font, Brushes.Black, 0, 0);
    }

}</source>

Graphics.DrawIcon

<source lang="csharp">using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Drawing2D; public class Form1 : System.Windows.Forms.Form {

   private void Form1_Paint(object sender,
       System.Windows.Forms.PaintEventArgs p) {
       Graphics g = p.Graphics;
   }
   private void createManually() {
       Graphics g;
       g = this.CreateGraphics();
   }
   private void createFromFile() {
       Graphics g;
       Bitmap b;
       b = new Bitmap("C:\E.bmp");
       g = Graphics.FromImage(b);
   }
   private void drawLine() {
       Graphics g;
       g = this.CreateGraphics();
       Icon i = new Icon(@"C:\Desktop.ico");
       g.DrawIcon(i, 150, 15);
   }

}</source>

Graphics.DrawImage

<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   Bitmap bmp = new Bitmap("rama.jpg");
   Rectangle r = new Rectangle(0, 0, bmp.Width, bmp.Height);
   g.DrawImage(bmp, r, r, GraphicsUnit.Pixel);
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}</source>

Graphics.DrawLine

<source lang="csharp">using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms;

class PrintableForm: Form {

    public static void Main()
    {
         Application.Run(new PrintableForm());
    }
    public PrintableForm()
    {
         ResizeRedraw = true;
    }
    protected override void OnPaint(PaintEventArgs pea)
    {
         DoPage(pea.Graphics, ForeColor,ClientSize.Width, ClientSize.Height);
    }
    protected void DoPage(Graphics grfx, Color clr, int cx, int cy)
    {
         Pen pen = new Pen(clr);
  
         grfx.DrawLine(pen, 0,      0, cx - 1, cy - 1);
         grfx.DrawLine(pen, cx - 1, 0, 0,      cy - 1);
    }

}</source>

Graphics.DrawLines

<source lang="csharp">using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms;

class PrintableForm: Form {

    public static void Main()
    {
         Application.Run(new PrintableForm());
    }
    public PrintableForm()
    {
         ResizeRedraw = true;
    }
    protected override void OnPaint(PaintEventArgs pea)
    {
         DoPage(pea.Graphics, ForeColor,ClientSize.Width, ClientSize.Height);
    }
    protected void DoPage(Graphics grfx, Color clr, int cx, int cy)
    {
         Point[] apt = {new Point(0,      0),
                        new Point(cx - 1, 0),
                        new Point(cx - 1, cy - 1),
                        new Point(0,      cy - 1),
                        new Point(0,      0)};
  
         grfx.DrawLines(new Pen(clr), apt);
    }

}</source>

No Double Buffering Example

<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Windows.Forms;

 class Form1 : Form
 {
   public Form1()
   {
   }
   protected override void OnPaint(PaintEventArgs e)
   {
     Graphics g = e.Graphics;
     Random r = new Random();
     g.FillRectangle(Brushes.White, ClientRectangle);
     for (int x = 0; x < ClientRectangle.Width; x++)
     {
       for (int y = 0; y < ClientRectangle.Height; y += 10)
       {
         Color c = Color.FromArgb(r.Next(255), r.Next(255),r.Next(255));
         using (Pen p = new Pen(c, 1))
         {
           g.DrawLine(p, new Point(0, 0), new Point(x, y));
           g.DrawLine(p, new Point(10, 40), new Point(x, y));
           g.DrawLine(p, new Point(20, 30), new Point(x, y));
           g.DrawLine(p, new Point(30, 20), new Point(x, y));
           g.DrawLine(p, new Point(40, 10), new Point(x, y));
           g.DrawLine(p, new Point(50, 10), new Point(x, y));                                                            
         }
       }
     }
   }
   [STAThread]
   static void Main()
   {
     Application.EnableVisualStyles();
     Application.Run(new Form1());
   }
 }</source>

Set SmoothingMode

<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.SmoothingMode = SmoothingMode.AntiAlias;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   Pen p = new Pen(Color.Black, 10);
   p.StartCap = LineCap.Round;
   p.EndCap = LineCap.ArrowAnchor;
   g.DrawLine(p, 30, 30, 80, 30);
   p.Dispose();
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}</source>

TranslateTransform a Graphics

<source lang="csharp">using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   protected override void OnPaint(PaintEventArgs e) {
   Graphics g = e.Graphics;
   g.FillRectangle(Brushes.White, this.ClientRectangle);
   Font f = new Font("Times New Roman", 24);
   g.DrawString("Translation", f, Brushes.Black, 0, 0);
   g.TranslateTransform(150, 75);
   g.DrawString("Translation", f, Brushes.Black, 0, 0);
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}</source>