Csharp/C Sharp/2D Graphics/Pens
Содержание
- 1 11-Pixel Centered Pen
- 2 11-Pixel Inset Pen
- 3 creates the custom dash pattern
- 4 creates the custom dash pattern 5
- 5 Custom Pen
- 6 DashDot style Pen
- 7 Dispose a pen
- 8 illustrates the use of multiple Pens
- 9 make red and blue pens
- 10 new Pen(clr, f)
- 11 new Pen(ForeColor)
- 12 new Pen(lgbrush, Math.Min(cx, cy) / 25), Gradient Pen
- 13 Pen alignment: center
- 14 Pen alignment: inset
- 15 Pen Dash Caps: Flat, Round, Triangle
- 16 Pen Dash Styles
- 17 Pen width and color
- 18 Set DashStyle
- 19 Set LineJoin for Pen
- 20 StartCap, EndCap
11-Pixel Centered Pen
<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; using System.Windows.Forms.VisualStyles; using System.Drawing.Drawing2D; public class Form1 : Form {
public Form1() { InitializeComponent(); } private void SimpleStyleRenderer_Paint(object sender, PaintEventArgs e) { Rectangle rect = new Rectangle(10, 10, 110, 110); Pen pen = new Pen(Color.White, 11); Pen penOutline = new Pen(Color.Black, 1); penOutline.Alignment = PenAlignment.Inset; pen.Alignment = PenAlignment.Center; e.Graphics.DrawString("11-Pixel Centered Pen", SystemFonts.DefaultFont, Brushes.Black, rect.Location); rect.Offset(0, 25); e.Graphics.FillRectangle(Brushes.LightBlue, rect); e.Graphics.DrawRectangle(pen, rect); e.Graphics.DrawRectangle(penOutline, rect); pen.Dispose(); }
private void InitializeComponent() { this.SuspendLayout(); // // SimpleStyleRenderer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(384, 353); this.Name = "SimpleStyleRenderer"; this.Text = "SimpleStyleRenderer"; this.Paint += new System.Windows.Forms.PaintEventHandler(this.SimpleStyleRenderer_Paint); this.ResumeLayout(false); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); }
}
</source>
11-Pixel Inset Pen
<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; using System.Windows.Forms.VisualStyles; using System.Drawing.Drawing2D; public class Form1 : Form {
public Form1() { InitializeComponent(); } private void SimpleStyleRenderer_Paint(object sender, PaintEventArgs e) { Rectangle rect = new Rectangle(10, 10, 110, 110); Pen pen = new Pen(Color.White, 11); Pen penOutline = new Pen(Color.Black, 1); penOutline.Alignment = PenAlignment.Inset; pen.Alignment = PenAlignment.Center; rect.Offset(10, -25); e.Graphics.DrawString("11-Pixel Inset Pen", SystemFonts.DefaultFont, Brushes.Black, rect.Location); rect.Offset(0, 25); pen.Alignment = PenAlignment.Inset; e.Graphics.FillRectangle(Brushes.LightBlue, rect); e.Graphics.DrawRectangle(pen, rect); e.Graphics.DrawRectangle(penOutline, rect); pen.Dispose(); }
private void InitializeComponent() { this.SuspendLayout(); // // SimpleStyleRenderer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(384, 353); this.Name = "SimpleStyleRenderer"; this.Text = "SimpleStyleRenderer"; this.Paint += new System.Windows.Forms.PaintEventHandler(this.SimpleStyleRenderer_Paint); this.ResumeLayout(false); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); }
}
</source>
creates the custom dash pattern
<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; Pen p = new Pen(Color.Black, 2); float[] f = { 15, 5, 10, 5 }; p.DashPattern = f; g.DrawRectangle(p, 10, 10, 80, 100); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
creates the custom dash pattern 5
<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); Pen p = new Pen(Color.Black, 1); float[] f = { 15, 5, 10, 5 }; p.DashPattern = f; g.DrawRectangle(p, 10, 10, 80, 100); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Custom Pen
<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; using System.Drawing.Drawing2D; public class MainForm : Form {
public MainForm() { } protected void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Pen bluePen = new Pen(Color.Blue, 20); Pen pen2 = Pens.Firebrick; g.DrawEllipse(bluePen, 10, 10, 100, 100); g.DrawLine(pen2, 10, 130, 110, 130); g.DrawPie(Pens.Black, 150, 10, 120, 150, 90, 80); Pen pen3 = new Pen(Color.Purple, 5); pen3.DashStyle = DashStyle.DashDotDot; g.DrawPolygon(pen3, new Point[]{ new Point(30, 140), new Point(265, 200), new Point(100, 225), new Point(190, 190), new Point(50, 330), new Point(20, 180)}); Rectangle r = new Rectangle(150, 10, 130, 60); g.DrawRectangle(Pens.Blue, r); g.DrawString("Hello out there...How are ya?",new Font("Arial", 12), Brushes.Black, r); Pen customDashPen = new Pen(Color.BlueViolet, 10); float[] myDashes = { 5.0f, 2.0f, 1.0f, 3.0f }; customDashPen.DashPattern = myDashes; g.DrawRectangle(customDashPen, ClientRectangle); } public static void Main(){ Application.Run(new MainForm()); }
}
</source>
DashDot style Pen
<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 {
[STAThread] static void Main() { Application.Run(new Form1()); } protected override void OnPaint(PaintEventArgs e) { Pen p = new Pen(Color.HotPink, 10); p.DashStyle = DashStyle.DashDot; Graphics g = this.CreateGraphics(); g.DrawEllipse(p, 10, 15, 105, 250); }
}
</source>
Dispose a pen
<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); Pen p = new Pen(Color.Black); g.DrawLine(p, 0, 0, 100, 100); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
illustrates the use of multiple Pens
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example21_2.cs illustrates the use of multiple Pens
- /
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Example21_2 : System.Windows.Forms.Form {
private System.ruponentModel.Container components = null; public Example21_2() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } private void InitializeComponent() { this.BackColor = System.Drawing.Color.White; this.ClientSize = new System.Drawing.Size(400, 400); this.Name = "Example21_2"; this.Text = "Example21_2"; this.Paint += new System.Windows.Forms. PaintEventHandler(this.Example21_2_Paint); }
static void Main() { Application.Run(new Example21_2()); } private void Example21_2_Paint( object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; // draw two lines with one pen Pen p = new Pen(Color.Black, 10); g.DrawLine(p, 25, 25, 375, 375); g.DrawLine(p, 25, 375, 375, 25); // draw four lines with another pen Pen p2 = new Pen(Color.Gray, 7); p2.EndCap = LineCap.Round; p2.StartCap = LineCap.ArrowAnchor; g.DrawLine(p2, 25, 35, 25, 365); g.DrawLine(p2, 35, 375, 365, 375); g.DrawLine(p2, 375, 365, 375, 35); g.DrawLine(p2, 365, 25, 35, 25); }
}
</source>
make red and blue pens
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class TestGDI1 : System.Windows.Forms.Form{
//in order to paint something OnPaint method needs to be overridden protected override void OnPaint(System.Windows.Forms.PaintEventArgs pe) { //OnPaint method is a member of Form class //The following call sends pe to an event listener Graphics base.OnPaint(pe); //initialize Graphics System.Drawing.Graphics g=pe.Graphics; //designate the area of the form where the drawing must take place //ClientRectangle is a member of Windows.Forms.Control class System.Drawing.Rectangle client_area=this.ClientRectangle; //point11 is at the top left corner of the client_area System.Drawing.Point point11=new System.Drawing.Point(client_area.X,client_area.Y); //point12 is at the bottom right corner of the client area System.Drawing.Point point12=new System.Drawing.Point(client_area.Width,client_area.Height); //create a Brush object of white color //SolidBrush means that the color does not change from point to point System.Drawing.Brush background=new System.Drawing.SolidBrush(System.Drawing.Color.White); //color client_area with solid white brush g.FillRectangle(background,client_area); //make red and blue pens System.Drawing.Pen p=new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Pen p1=new System.Drawing.Pen(System.Drawing.Color.Blue); //create points and rectangles System.Drawing.SizeF size=new System.Drawing.SizeF(); size.Height=160; size. Width=180; System.Drawing.PointF point=new System.Drawing.PointF(); point.X=8; point.Y=40; System.Drawing.Point point1=new System.Drawing.Point(); point1.X=300; point1.Y=300; System.Drawing.Point point2=new System.Drawing.Point(); point2.X=0; point2.Y=0; System.Drawing.RectangleF rec =new System.Drawing.RectangleF(point,size); //draw an ellipse inscribed in the invisible rectangle rec //to change the size or shape of the ellipse change an invisible rectangle in which it is inscribed //to change the color of the ellipse, change the color of the pen p which is used to draw it g.DrawEllipse(p,rec); //draw a line between a pair of points point1 and point2 with pen p1 g.DrawLine(p1,point1,point2); } public static void Main() { System.Windows.Forms.Application.Run(new TestGDI1());//display form }
}
</source>
new Pen(clr, f)
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class PenWidths: Form {
public static void Main() { Application.Run(new PenWidths()); } public PenWidths() { Text = "Pen Widths"; 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) { Brush brush = new SolidBrush(clr); float y = 0; grfx.PageUnit = GraphicsUnit.Point; grfx.PageScale = 1; for (float f = 0; f < 3.2; f += 0.2f) { Pen pen = new Pen(clr, f); string str = String.Format("{0:F1} point wide pen: ", f); SizeF sizef = grfx.MeasureString(str, Font); grfx.DrawString(str, Font, brush, 0, y); grfx.DrawLine(pen, sizef.Width, y + sizef.Height / 2, sizef.Width + 144, y + sizef.Height / 2); y += sizef.Height; } }
}
</source>
new Pen(ForeColor)
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class XMarksTheSpot: Form {
public static void Main() { Application.Run(new XMarksTheSpot()); } public XMarksTheSpot() { Text = "X Marks The Spot"; ResizeRedraw = true; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; Pen pen = new Pen(ForeColor); grfx.DrawLine(pen, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1); grfx.DrawLine(pen, 0, ClientSize.Height - 1, ClientSize.Width - 1, 0); }
}
</source>
new Pen(lgbrush, Math.Min(cx, cy) / 25), Gradient Pen
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class GradientPen: Form {
public static void Main() { Application.Run(new GradientPen()); } public GradientPen() { 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) { Brush lgbrush = new LinearGradientBrush( new Rectangle(0, 0, cx, cy), Color.White, Color.Black, LinearGradientMode.BackwardDiagonal); Pen pen = new Pen(lgbrush, Math.Min(cx, cy) / 25); pen.Alignment = PenAlignment.Inset; grfx.DrawRectangle(pen, 0, 0, cx, cy); grfx.DrawLine(pen, 0, 0, cx, cy); grfx.DrawLine(pen, 0, cy, cx, 0); }
}
</source>
Pen alignment: center
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = ""; this.Resize += new System.EventHandler(this.Form1_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } static void Main() { Application.Run(new Form1()); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Black, 3); p.Alignment = PenAlignment.Center; g.DrawRectangle(p, 3, 3, 80, 70); p.Dispose(); } private void Form1_Resize(object sender, System.EventArgs e) { Invalidate(); } } </source>
Pen alignment: inset
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = ""; this.Resize += new System.EventHandler(this.Form1_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } static void Main() { Application.Run(new Form1()); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Black, 3); p.Alignment = PenAlignment.Inset; g.DrawRectangle(p, 3, 3, 80, 70); p.Dispose(); } private void Form1_Resize(object sender, System.EventArgs e) { Invalidate(); } } </source>
Pen Dash Caps: Flat, Round, Triangle
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class PenDashCaps: Form {
MenuItem miChecked; public static void Main() { Application.Run(new PenDashCaps()); } public PenDashCaps() { ResizeRedraw = true; Menu = new MainMenu(); Menu.MenuItems.Add("&Width"); int[] aiWidth = { 1, 2, 5, 10, 15, 20, 25 }; foreach (int iWidth in aiWidth) Menu.MenuItems[0].MenuItems.Add(iWidth.ToString(), new EventHandler(MenuWidthOnClick)); miChecked = Menu.MenuItems[0].MenuItems[0]; miChecked.Checked = true; } void MenuWidthOnClick(object obj, EventArgs ea) { miChecked.Checked = false; miChecked = (MenuItem) obj; miChecked.Checked = true; Invalidate(); } 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, Convert.ToInt32(miChecked.Text)); pen.DashStyle = DashStyle.DashDotDot; foreach (DashCap dc in Enum.GetValues(typeof(DashCap))) { pen.DashCap = dc; grfx.DrawLine(pen, cx / 8, cy / 4, 7 * cx / 8, cy / 4); grfx.TranslateTransform(0, cy / 4); } }
}
</source>
Pen Dash Styles
<source lang="csharp"> /* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace GDI_Basics {
/// <summary> /// Summary description for PenDashStyles. /// </summary> public class PenDashStyles : System.Windows.Forms.Form { /// <summary> /// Required designer variable. /// </summary> private System.ruponentModel.Container components = null; public PenDashStyles() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { // // PenDashStyles // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(500, 398); this.Name = "PenDashStyles"; this.Text = "PenDashStyles"; this.Resize += new System.EventHandler(this.PenDashStyles_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.PenDashStyles_Paint); } #endregion [STAThread] static void Main() { Application.Run(new PenDashStyles()); } private void PenDashStyles_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Pen myPen = new Pen(Color.Blue, 10); int y = 20; foreach (DashStyle dash in System.Enum.GetValues(typeof(DashStyle))) { myPen.DashStyle = dash; e.Graphics.DrawLine(myPen, 20, y, 100, y); e.Graphics.DrawString(dash.ToString(), new Font("Tahoma", 8), Brushes.Black, 120, y - 10); y += 30; } y += 10; myPen.StartCap = LineCap.Round; myPen.EndCap = LineCap.Round; foreach (DashStyle dash in System.Enum.GetValues(typeof(DashStyle))) { myPen.DashStyle = dash; e.Graphics.DrawLine(myPen, 20, y, 100, y); e.Graphics.DrawString(dash.ToString() + " (with round caps)", new Font("Tahoma", 8), Brushes.Black, 120, y - 10); y += 30; } } private void PenDashStyles_Resize(object sender, System.EventArgs e) { this.Invalidate(); } }
}
</source>
Pen width and color
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class MainForm : System.Windows.Forms.Form { public MainForm() { InitializeComponent(); CenterToScreen(); SetStyle(ControlStyles.ResizeRedraw, true); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = "Pens..."; this.Resize += new System.EventHandler(this.Form1_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainForm_Paint); } static void Main() { Application.Run(new MainForm()); } private void MainForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; Pen bluePen = new Pen(Color.Blue, 20); Pen pen2 = Pens.Firebrick; // Render some shapes with the pens. g.DrawEllipse(bluePen, 10, 10, 100, 100); g.DrawLine(pen2, 10, 130, 110, 130); g.DrawPie(Pens.Black, 150, 10, 120, 150, 90, 80); } private void Form1_Resize(object sender, System.EventArgs e) { Invalidate(); } }
</source>
Set DashStyle
<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.FillRectangle(Brushes.White, this.ClientRectangle); Pen p = new Pen(Color.Black, 1); p.DashStyle = DashStyle.Dash; g.DrawLine(p, 3, 3, 100, 3); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Set LineJoin for Pen
<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.SmoothingMode = SmoothingMode.AntiAlias; g.FillRectangle(Brushes.White, this.ClientRectangle); Pen p = new Pen(Color.Black, 10); p.LineJoin = LineJoin.Bevel; e.Graphics.DrawRectangle(p, 20, 20, 60, 60); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
StartCap, EndCap
<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 {
[STAThread] static void Main() { Application.Run(new Form1()); } protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Brown, 15); p.StartCap = LineCap.SquareAnchor; p.EndCap = LineCap.SquareAnchor; g.DrawLine(p, 30, 190, Width - 50, 190); }
}
</source>