Csharp/C Sharp/2D Graphics/Graphics
Содержание
- 1 Apply the scaling transformation(scale subsequent operations by 2x horizontally and 3x vertically)
- 2 Bezier Art: DrawBeziers
- 3 Clear a Graphics
- 4 Clipping: ResetClip
- 5 DpiY and DpiX
- 6 Draw an Image
- 7 Draw a Rectangle
- 8 Draw Ellipse
- 9 DrawImage with destination points
- 10 DrawImage with size
- 11 DrawPie with offset
- 12 Fill a Rectangle with LinearGradientBrush
- 13 Fill a Rectangle with TextureBrush
- 14 FillEllipse: Red Traffic Light
- 15 FillPolygon: Alternate and Winding Fill Modes
- 16 Fill the area "bounded" by the path
- 17 Graphics: Draw an Icon
- 18 Graphics: DrawArc
- 19 Graphics: DrawPie
- 20 Graphics: DrawRectangle
- 21 Graphics: DrawRectangles
- 22 Graphics: DrawString
- 23 Graphics: FillClosedCurve
- 24 Graphics: FillEllipse
- 25 Graphics: FillRectangle
- 26 Graphics: FillRectangles
- 27 Graphics: MeasureString
- 28 Graphics: PageScale
- 29 Graphics: PageUnit
- 30 Graphics: Pen Alignment
- 31 Graphics: ScaleTransform
- 32 Graphics: SetClip
- 33 Graphics.SmoothingMode
- 34 Graphics: Transform
- 35 Graphics: TranslateClip
- 36 Graphics: TranslateTransform
- 37 Line and Arc Combo
- 38 One-Inch Ellipse
- 39 Paint along points in a list points
- 40 Picture Cube: DrawImage
- 41 PixelOffsetMode
- 42 Reset the transformation Translate by 30 pixels in vertical direction
- 43 Rotate the text 45 degrees clockwise then Translate the text 150 pixels horizontally
- 44 Rotate the text through 45 degrees
- 45 Scribble with Mouse
- 46 Transform and RotateTransform in a loop
- 47 TransformPoints
- 48 Use different Font object to draw a line of text
- 49 Wide Polyline: DrawLines
Apply the scaling transformation(scale subsequent operations by 2x horizontally and 3x vertically)
<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); g.DrawRectangle(Pens.Black, 10, 10, 50, 50); g.DrawEllipse(Pens.Black, 10, 10, 10, 10); g.ScaleTransform(2.0f, 3.0f); g.DrawRectangle(Pens.Black, 10, 10, 50, 50); g.DrawEllipse(Pens.Black, 10, 10, 10, 10); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Bezier Art: DrawBeziers
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class BezierArt: Form {
public static void Main() { Application.Run(new BezierArt()); } public BezierArt() { ResizeRedraw = true; } protected override void OnPaint(PaintEventArgs pea) { DoPage(pea.Graphics, ForeColor,200, 200); } protected void DoPage(Graphics grfx, Color clr, int cx, int cy) { Pen pen = new Pen(clr); PointF[] aptf = new PointF[4]; int iNum = 100; for (int i = 0; i < iNum; i++) { double dAngle = 2 * i * Math.PI / iNum; aptf[0].X = cx / 2 + cx / 2 * (float) Math.Cos(dAngle); aptf[0].Y = 5 * cy / 8 + cy / 16 * (float) Math.Sin(dAngle); aptf[1] = new PointF(cx / 2, -cy); aptf[2] = new PointF(cx / 2, 2 * cy); dAngle += Math.PI; aptf[3].X = cx / 2 + cx / 4 * (float) Math.Cos(dAngle); aptf[3].Y = cy / 2 + cy / 16 * (float) Math.Sin(dAngle); grfx.DrawBeziers(pen, aptf); } }
}
</source>
Clear a Graphics
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class RandomClear: Form {
public static void Main() { Application.Run(new RandomClear()); } public RandomClear() { Text = "Random Clear"; } protected override void OnPaint(PaintEventArgs pea) { Graphics graphics = pea.Graphics; Random rand = new Random(); graphics.Clear(Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256))); }
}
</source>
Clipping: ResetClip
<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 {
GraphicsPath gP; [STAThread] static void Main() { Application.Run(new Form1()); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; DrawPathTransform(g); g.Dispose(); } void AddStringToPath(string s) { int fSt = (int)FontStyle.Regular; Point xy = new Point(50, 10); FontFamily fF = new FontFamily("Times new roman"); StringFormat sFr = StringFormat.GenericDefault; gP.AddString(s, fF, fSt, 100, xy, sFr); } void DrawPathTransform(Graphics g) { gP = new GraphicsPath(); AddStringToPath("C#"); g.FillPath(Brushes.Gray, gP); Matrix m = new Matrix(); m.Translate(5, 5); gP.Transform(m); g.FillPath(Brushes.Yellow, gP); g.DrawPath(Pens.Red, gP); } void DrawClip(Graphics g) { gP = new GraphicsPath(); AddStringToPath("C#"); g.SetClip(gP); g.TranslateClip(-5, -5); RectangleF rc = gP.GetBounds(); rc.Offset(-5, -5); g.FillRectangle(Brushes.Gray, rc); g.ResetClip(); g.FillPath(Brushes.Yellow, gP); g.DrawPath(Pens.Red, gP); }
}
</source>
DpiY and DpiX
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class DotsPerInch: Form {
public static void Main() { Application.Run(new DotsPerInch()); } public DotsPerInch() { 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) { grfx.DrawString(String.Format("DpiX = {0}\nDpiY = {1}", grfx.DpiX, grfx.DpiY), Font, new SolidBrush(clr), 0, 0); }
}
</source>
Draw an Image
<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"); g.DrawImage(bmp, 0, 0); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Draw a Rectangle
<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.DrawRectangle(p, 3, 3, 8, 7); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Draw Ellipse
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class ClientEllipse: Form {
public static void Main() { Application.Run(new ClientEllipse()); } public ClientEllipse() { Text = "Client Ellipse"; 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) { grfx.DrawEllipse(new Pen(clr), 0, 0, cx - 1, cy - 1); }
}
</source>
DrawImage with destination points
<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"); g.FillRectangle(Brushes.White, this.ClientRectangle); Point[] destinationPoints = { new Point(0, 0), // destination for upper-left point of original new Point(100, 0), // destination for upper-right point of original new Point(50, 100)};// destination for lower-left point of original g.DrawImage(bmp, destinationPoints); } public static void Main() { Application.Run(new Form1()); }
}
</source>
DrawImage with size
<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, this.ClientRectangle); } public static void Main() { Application.Run(new Form1()); }
}
</source>
DrawPie with offset
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class PieChart: Form {
int[] aiValues = { 50, 100, 25, 150, 100, 75 }; public static void Main() { Application.Run(new PieChart()); } public PieChart() { 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) { Rectangle rect = new Rectangle(50, 50, 200, 200); Pen pen = new Pen(clr); int iTotal = 0; float fAngle = 0, fSweep; foreach(int iValue in aiValues) iTotal += iValue; foreach(int iValue in aiValues) { fSweep = 360f * iValue / iTotal; DrawPieSlice(grfx, pen, rect, fAngle, fSweep); fAngle += fSweep; } } protected virtual void DrawPieSlice(Graphics grfx, Pen pen, Rectangle rect, float fAngle, float fSweep) { float fSlice = (float)(2 * Math.PI * (fAngle + fSweep / 2) / 360); rect.Offset((int)(rect.Width / 10 * Math.Cos(fSlice)), (int)(rect.Height / 10 * Math.Sin(fSlice))); grfx.DrawPie(pen, rect, fAngle, fSweep); }
}
</source>
Fill a Rectangle with LinearGradientBrush
<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; LinearGradientBrush lgb = new LinearGradientBrush( new Point(0, 0), new Point(50, 10), Color.White, Color.Black); g.FillRectangle(lgb, this.ClientRectangle); lgb.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Fill a Rectangle with TextureBrush
<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("alphabet.gif"); TextureBrush tb = new TextureBrush(bmp); g.FillRectangle(tb, 45, 45, 70, 150); bmp.Dispose(); tb.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
FillEllipse: Red Traffic Light
<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 {
private int lightColor = 1; public Form1() { InitializeComponent(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.FillRectangle(Brushes.White, this.ClientRectangle); Rectangle r = new Rectangle(10, 10, 60, 180); g.FillRectangle(Brushes.LightGray, r); Rectangle r1 = new Rectangle(10, 10, 60, 60); Rectangle r2 = new Rectangle(10, 70, 60, 60); Rectangle r3 = new Rectangle(10, 130, 60, 60); switch (lightColor) { case 1: g.FillEllipse(Brushes.Red, r1); g.FillEllipse(Brushes.Black, r2); g.FillEllipse(Brushes.Black, r3); break; case 2: g.FillEllipse(Brushes.Black, r1); g.FillEllipse(Brushes.Yellow, r2); g.FillEllipse(Brushes.Black, r3); break; case 3: g.FillEllipse(Brushes.Black, r1); g.FillEllipse(Brushes.Black, r2); g.FillEllipse(Brushes.Green, r3); break; } } private void Form1_Click(object sender, EventArgs e) { lightColor++; if (lightColor == 4) lightColor = 1; this.Invalidate(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 271); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); this.Click += new System.EventHandler(this.Form1_Click); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); }
}
</source>
FillPolygon: Alternate and Winding Fill Modes
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class FillModesClassical : Form {
public static void Main() { Application.Run(new FillModesClassical()); } public FillModesClassical() { ResizeRedraw = true; ClientSize = new Size(2 * ClientSize.Height, ClientSize.Height); } 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); Point[] apt = new Point[5]; for (int i = 0; i < apt.Length; i++) { double dAngle = (i * 0.8 - 0.5) * Math.PI; apt[i] = new Point( (int)(cx * (0.25 + 0.24 * Math.Cos(dAngle))), (int)(cy * (0.50 + 0.48 * Math.Sin(dAngle)))); } grfx.FillPolygon(brush, apt, FillMode.Alternate); }
}
</source>
Fill the area "bounded" by the path
<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); GraphicsPath gp = new GraphicsPath(); gp.AddLine(10, 10, 10, 50); gp.AddLine(10, 50, 50, 50); gp.AddLine(50, 50, 50, 10); gp.StartFigure(); gp.AddLine(60, 10, 60, 50); gp.AddLine(60, 50, 100, 50); gp.AddLine(100, 50, 100, 10); gp.CloseFigure(); Rectangle r = new Rectangle(110, 10, 40, 40); gp.AddEllipse(r); g.FillPath(Brushes.Orange, gp); g.DrawPath(Pens.Black, gp); gp.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Graphics: Draw an Icon
<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Net; using System.IO; public class Form1 : System.Windows.Forms.Form {
[STAThread] static void Main() { Application.Run(new Form1()); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { string p = "icon.ico"; Icon ic = new Icon(p); this.Icon = ic; // Icon 1) Graphics g = e.Graphics; g.DrawIcon(ic, 0, 0); // Icon 2) Image i = ic.ToBitmap(); g.DrawImage(i, 50, 0); // Icon 3)
g.Dispose(); }
}
</source>
Graphics: DrawArc
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class DashedEllipse: Form {
public static void Main() { Application.Run(new DashedEllipse()); } public DashedEllipse() { Text = "Dashed Ellipse Using DrawArc"; 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); Rectangle rect = new Rectangle(0, 0, cx - 1, cy - 1); for (int iAngle = 0; iAngle < 360; iAngle += 15) grfx.DrawArc(pen, rect, iAngle, 10); }
}
</source>
Graphics: DrawPie
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class PieChart: Form {
int[] aiValues = { 50, 100, 25, 150, 100, 75 }; public static void Main() { Application.Run(new PieChart()); } public PieChart() { Text = "Pie Chart"; 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) { Rectangle rect = new Rectangle(50, 50, 200, 200); Pen pen = new Pen(clr); int iTotal = 0; float fAngle = 0, fSweep; foreach(int iValue in aiValues) iTotal += iValue; foreach(int iValue in aiValues) { fSweep = 360f * iValue / iTotal; DrawPieSlice(grfx, pen, rect, fAngle, fSweep); fAngle += fSweep; } } protected virtual void DrawPieSlice(Graphics grfx, Pen pen, Rectangle rect, float fAngle, float fSweep) { grfx.DrawPie(pen, rect, fAngle, fSweep); }
}
</source>
Graphics: DrawRectangle
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class OutlineClientRectangle: Form {
public static void Main() { Application.Run(new OutlineClientRectangle()); } public OutlineClientRectangle() { Text = "Client Rectangle"; 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) { grfx.DrawRectangle(Pens.Red, 0, 0, cx - 1, cy - 1); }
}
</source>
Graphics: DrawRectangles
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class FourByFours: Form {
public static void Main() { Application.Run(new FourByFours()); } public FourByFours() { 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); Brush brush = new SolidBrush(clr); grfx.DrawRectangles(pen, new Rectangle[] {new Rectangle(8, 2, 4, 4)}); }
}
</source>
Graphics: DrawString
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class MobyDick: Form {
public static void Main() { Application.Run(new MobyDick()); } public MobyDick() { 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) { grfx.DrawString("abc", Font, new SolidBrush(clr), new Rectangle(0, 0, cx, cy)); }
}
</source>
Graphics: FillClosedCurve
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class ClosedCurveFillModes: Form {
public static void Main() { Application.Run(new ClosedCurveFillModes()); } ClosedCurveFillModes() { 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); Point[] apt = new Point[5]; for (int i = 0; i < apt.Length; i++) { double dAngle = (i * 0.8 - 0.5) * Math.PI; apt[i] = new Point( (int)(cx *(0.25 + 0.24 * Math.Cos(dAngle))), (int)(cy *(0.50 + 0.48 * Math.Sin(dAngle)))); } grfx.FillClosedCurve(brush, apt, FillMode.Alternate); for (int i = 0; i < apt.Length; i++) apt[i].X += cx / 2; grfx.FillClosedCurve(brush, apt, FillMode.Winding); }
}
</source>
Graphics: FillEllipse
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class FourByFours: Form {
public static void Main() { Application.Run(new FourByFours()); } public FourByFours() { Text = "Four by Fours"; 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); Brush brush = new SolidBrush(clr); grfx.FillEllipse(brush, new Rectangle(14, 8, 4, 4)); }
}
</source>
Graphics: FillRectangle
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class FourByFours: Form {
public static void Main() { Application.Run(new FourByFours()); } public FourByFours() { 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); Brush brush = new SolidBrush(clr); grfx.FillRectangle(brush, new Rectangle(2, 8, 4, 4)); }
}
</source>
Graphics: FillRectangles
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class FourByFours: Form {
public static void Main() { Application.Run(new FourByFours()); } public FourByFours() { Text = "Four by Fours"; 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); Brush brush = new SolidBrush(clr); grfx.FillRectangles(brush, new Rectangle[] {new Rectangle(8, 8, 4, 4)}); }
}
</source>
Graphics: MeasureString
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class SysInfoColumns: Form {
public static void Main() { Application.Run(new SysInfoColumns()); } public SysInfoColumns() { } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; Brush brush = new SolidBrush(ForeColor); SizeF sizef; float cxCol, y = 0; int cySpace; sizef = grfx.MeasureString("ArrangeStartingPosition ", Font); cxCol = sizef.Width; cySpace = Font.Height; grfx.DrawString("ArrangeDirection", Font, brush, 0, y); grfx.DrawString(SystemInformation.ArrangeDirection.ToString(), Font, brush, cxCol, y); y += cySpace; grfx.DrawString("ArrangeStartingPosition", Font, brush, 0, y); grfx.DrawString( SystemInformation.ArrangeStartingPosition.ToString(), Font, brush, cxCol, y); y += cySpace; grfx.DrawString("BootMode", Font, brush, 0, y); grfx.DrawString(SystemInformation.BootMode.ToString(), Font, brush, cxCol, y); y += cySpace; grfx.DrawString("Border3DSize", Font, brush, 0, y); grfx.DrawString(SystemInformation.Border3DSize.ToString(), Font, brush, cxCol, y); y += cySpace; grfx.DrawString("BorderSize", Font, brush, 0, y); grfx.DrawString(SystemInformation.BorderSize.ToString(), Font, brush, cxCol, y); y += cySpace; grfx.DrawString("CaptionButtonSize", Font, brush, 0, y); grfx.DrawString(SystemInformation.CaptionButtonSize.ToString(), Font, brush, cxCol, y); }
}
</source>
Graphics: PageScale
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class ArbitraryCoordinates: Form {
public static void Main() { Application.Run(new ArbitraryCoordinates()); } public ArbitraryCoordinates() { Text = "Arbitrary Coordinates"; 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) { grfx.PageUnit = GraphicsUnit.Pixel; SizeF sizef = grfx.VisibleClipBounds.Size; grfx.PageScale = Math.Min(sizef.Width / grfx.DpiX / 1000, sizef.Height / grfx.DpiY / 1000); grfx.DrawEllipse(new Pen(clr), 0, 0, 990, 990); }
}
</source>
Graphics: PageUnit
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class ArbitraryCoordinates: Form {
public static void Main() { Application.Run(new ArbitraryCoordinates()); } public ArbitraryCoordinates() { Text = "Arbitrary Coordinates"; 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) { grfx.PageUnit = GraphicsUnit.Pixel; SizeF sizef = grfx.VisibleClipBounds.Size; grfx.DrawEllipse(new Pen(clr), 0, 0, 990, 990); }
}
</source>
Graphics: Pen Alignment
<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; Pen p = new Pen(Color.Black, 3); p.Alignment = PenAlignment.Center; g.DrawRectangle(p, 3, 3, 8, 7); p.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Graphics: ScaleTransform
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class MobyDick: Form {
public static void Main() { Application.Run(new MobyDick()); } public MobyDick() { 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) { grfx.ScaleTransform(1, 3); grfx.DrawString("abc", Font, new SolidBrush(clr), new Rectangle(0, 0, cx, cy)); }
}
</source>
Graphics: SetClip
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class KeyholeClip: Form {
protected Image image; protected GraphicsPath path; public static void Main() { Application.Run(new KeyholeClip()); } public KeyholeClip() { ResizeRedraw = true; image = Image.FromFile("Color.jpg"); path = new GraphicsPath(); path.AddArc(80, 0, 80, 80, 45, -270); path.AddLine(70, 180, 170, 180); } protected override void OnPaint(PaintEventArgs pea) { pea.Graphics.SetClip(path); pea.Graphics.DrawImage(image, 0, 0, image.Width, image.Height); }
}
</source>
Graphics.SmoothingMode
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class AntiAlias: Form {
public static void Main() { Application.Run(new AntiAlias()); } public AntiAlias() { Text = "Anti-Alias Demo"; BackColor = SystemColors.Window; ForeColor = SystemColors.WindowText; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; Pen pen = new Pen(ForeColor); grfx.SmoothingMode = SmoothingMode.None; grfx.DrawLine(pen, 2, 2, 18, 10); }
}
</source>
Graphics: Transform
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class MobyDick: Form {
public static void Main() { Application.Run(new MobyDick()); } public MobyDick() { 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) { grfx.Transform = new Matrix(1, 1, -1, 1, 0, 0); grfx.DrawString("abc", Font, new SolidBrush(clr), new Rectangle(0, 0, cx, cy)); }
}
</source>
Graphics: TranslateClip
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class KeyholeClipCentered : Form {
GraphicsPath path = new GraphicsPath(); Image image = Image.FromFile("Color.jpg"); public static void Main() { Application.Run(new KeyholeClipCentered()); } public KeyholeClipCentered() { ResizeRedraw = true; path.AddArc(80, 0, 80, 80, 45, -270); path.AddLine(70, 180, 170, 180); } 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) { grfx.SetClip(path); RectangleF rectf = path.GetBounds(); int xOffset = (int)((cx - rectf.Width) / 2 - rectf.X); int yOffset = (int)((cy - rectf.Height) / 2 - rectf.Y); grfx.TranslateClip(xOffset, yOffset); grfx.DrawImage(image, xOffset, yOffset, image.Width, image.Height); }
}
</source>
Graphics: TranslateTransform
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class RotatedRectangles: Form {
public static void Main() { Application.Run(new RotatedRectangles()); } public RotatedRectangles() { Text = "Rotated Rectangles"; 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.PageUnit = GraphicsUnit.Pixel; PointF[] aptf = { (PointF) grfx.VisibleClipBounds.Size }; grfx.PageUnit = GraphicsUnit.Inch; grfx.PageScale = 0.01f; grfx.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, aptf); grfx.TranslateTransform(aptf[0].X / 2, aptf[0].Y / 2); for (int i = 0; i < 6; i++) { grfx.DrawRectangle(pen, 0, 0, 200, 200); grfx.RotateTransform(10); } }
}
</source>
Line and Arc Combo
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms;
class LineArcCombo: Form {
public static void Main() { Application.Run(new LineArcCombo()); } public LineArcCombo() { 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, 25); grfx.DrawLine(pen, 25, 100, 125, 100); grfx.DrawArc (pen, 125, 50, 100, 100, -180, 180); grfx.DrawLine(pen, 225, 100, 325, 100); }
}
</source>
One-Inch Ellipse
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class TryOneInchEllipse: Form {
public static void Main() { Application.Run(new TryOneInchEllipse()); } public TryOneInchEllipse() { 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) { grfx.DrawEllipse(new Pen(clr), 0, 0, grfx.DpiX, grfx.DpiY); }
}
</source>
Paint along points in a list points
<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 MainForm : Form {
private List<Point> myPts = new List<Point>(); public MainForm() { this.Text = "Basic Paint Form"; this.Paint += new PaintEventHandler(MainForm_Paint); this.MouseDown += new MouseEventHandler(MainForm_MouseDown); } void MainForm_MouseDown(object sender, MouseEventArgs e) { myPts.Add(new Point(e.X, e.Y)); Invalidate(); } public void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.DrawString("Hello GDI+", new Font("Times New Roman", 20),Brushes.Green, 0, 0); foreach (Point p in myPts) g.FillEllipse(Brushes.Firebrick, p.X, p.Y, 10, 10); }
}
</source>
Picture Cube: DrawImage
<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form {
[STAThread] static void Main() { Application.Run(new Form1()); } protected override void OnPaint(PaintEventArgs pea) { CubeDBuf(); } private void CubeDBuf() { Graphics g; string path; int x = 100, y = 40; Point A = new Point(10, 50); Point B = new Point(180, 50); Point C = new Point(10, 170); Point a = new Point(A.X + x, A.Y - y); Point b = new Point(B.X + x, B.Y - y); Point Z = new Point(B.X, C.Y); Point[] p3Fro = { A, B, C }; Point[] p3Top = { a, b, A }; Point[] p3Rig = { B, b, Z }; Bitmap bm = new Bitmap(B.X + x, C.Y + y); g = Graphics.FromImage(bm); path = "A.bmp"; Image im1 = Image.FromFile(path); g.DrawImage(im1, p3Fro); path = "B.BMP"; Image im3 = Image.FromFile(path); g.DrawImage(im3, p3Top); path = "C.bmp"; Image im2 = Image.FromFile(path); g.DrawImage(im2, p3Rig); g = Graphics.FromHwnd(this.Handle); g.DrawImage(bm, 1, 1); g.Dispose(); }
}
</source>
PixelOffsetMode
<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;
class AntiAlias: Form {
public static void Main() { Application.Run(new AntiAlias()); } public AntiAlias() { Text = "Anti-Alias Demo"; BackColor = SystemColors.Window; ForeColor = SystemColors.WindowText; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; Pen pen = new Pen(ForeColor); grfx.PixelOffsetMode = PixelOffsetMode.Default; grfx.DrawLine(pen, 2, 2, 18, 10); }
}
</source>
Reset the transformation Translate by 30 pixels in vertical direction
<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, ClientRectangle); g.DrawEllipse(Pens.Black, 20, 20, 30, 50); g.TranslateTransform(-15, 0); g.DrawEllipse(Pens.Black, 20, 20, 30, 50); g.ResetTransform(); g.TranslateTransform(0, 30); g.DrawEllipse(Pens.Black, 20, 20, 30, 50); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Rotate the text 45 degrees clockwise then Translate the text 150 pixels horizontally
<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", 24); g.DrawString("Rotate then Translate", f, Brushes.Black, 0, 0); g.RotateTransform(45); g.TranslateTransform(150, 0); g.DrawString("Rotate then Translate ", f, Brushes.Black, 0, 0); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Rotate the text through 45 degrees
<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", 24); g.DrawString("Rotation", f, Brushes.Black, 0, 0); g.RotateTransform(45); g.DrawString("Rotation", f, Brushes.Black, 0, 0); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Scribble with Mouse
<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class frmScribble : System.Windows.Forms.Form {
private System.ruponentModel.Container components = null; private bool mouseDown = false; private Point lastPoint = Point.Empty; private string color = "black"; private Graphics g; private Pen p; public frmScribble() { g = CreateGraphics(); p = new Pen(Color.FromName(color)); } protected override void OnMouseDown(MouseEventArgs e) { mouseDown = true; if (e.Button == MouseButtons.Right) { ContextMenu m = new ContextMenu(); m.MenuItems.Add(0, new MenuItem("black", new EventHandler(RightMouseButton_Click))); m.MenuItems.Add(1, new MenuItem("white", new EventHandler(RightMouseButton_Click))); m.MenuItems.Add(2, new MenuItem("red", new EventHandler(RightMouseButton_Click))); m.MenuItems.Add(3, new MenuItem("green", new EventHandler(RightMouseButton_Click))); m.MenuItems.Add(4, new MenuItem("blue", new EventHandler(RightMouseButton_Click))); m.Show(this, new Point(e.X, e.Y)); } } protected void RightMouseButton_Click(object sender, EventArgs e) { color = ((MenuItem)sender).Text; p = new Pen(Color.FromName(color)); } protected override void OnMouseUp(MouseEventArgs e) { mouseDown = false; } protected override void OnMouseMove(MouseEventArgs e) { if (lastPoint.Equals(Point.Empty)) lastPoint = new Point(e.X, e.Y); if (mouseDown) { Point pMousePos = new Point(e.X, e.Y); g.DrawLine(p, pMousePos, lastPoint); } lastPoint = new Point(e.X, e.Y); } [STAThread] static void Main() { Application.Run(new frmScribble()); }
}
</source>
Transform and RotateTransform in a loop
<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", 16); for (float angle = 0; angle < 360; angle += 45) { g.ResetTransform(); g.TranslateTransform(ClientRectangle.Width / 2, ClientRectangle.Height / 2); g.RotateTransform(angle); g.DrawString("Hello, World", f, Brushes.Black, 50, 0); } } public static void Main() { Application.Run(new Form1()); }
}
</source>
TransformPoints
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class WhatSizeTransform : Form {
public static void Main() { Application.Run(new WhatSizeTransform()); } public WhatSizeTransform() { Text = "With TransformPoints"; ResizeRedraw = true; } protected void DoPage(Graphics grfx, Color clr, int cx, int cy) { Brush brush = new SolidBrush(clr); int y = 0; Point[] apt = { new Point(cx, cy) }; grfx.TransformPoints(CoordinateSpace.Device, CoordinateSpace.Page, apt); DoIt(grfx, brush, ref y, apt[0], GraphicsUnit.Pixel); DoIt(grfx, brush, ref y, apt[0], GraphicsUnit.Display); DoIt(grfx, brush, ref y, apt[0], GraphicsUnit.Document); DoIt(grfx, brush, ref y, apt[0], GraphicsUnit.Inch); DoIt(grfx, brush, ref y, apt[0], GraphicsUnit.Millimeter); DoIt(grfx, brush, ref y, apt[0], GraphicsUnit.Point); } void DoIt(Graphics grfx, Brush brush, ref int y,Point pt, GraphicsUnit gu) { GraphicsState gs = grfx.Save(); grfx.PageUnit = gu; grfx.PageScale = 1; PointF[] aptf = { pt }; grfx.TransformPoints(CoordinateSpace.Page, CoordinateSpace.Device, aptf); SizeF sizef = new SizeF(aptf[0]); grfx.Restore(gs); grfx.DrawString(gu + ": " + sizef, Font, brush, 0, y); y += (int)Math.Ceiling(Font.GetHeight(grfx)); }
}
</source>
Use different Font object to draw a line of text
<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 font = new Font("Times New Roman", 12, FontStyle.Regular); Font bfont = new Font("Times New Roman", 12, FontStyle.Bold); Font ifont = new Font("Times New Roman", 12, FontStyle.Italic); Font bifont = new Font("Times New Roman", 12,FontStyle.Bold | FontStyle.Italic); Font sfont = new Font("Times New Roman", 12, FontStyle.Strikeout); Font ufont = new Font("Times New Roman", 12, FontStyle.Underline); Font bsfont = new Font("Times New Roman", 12,FontStyle.Bold | FontStyle.Strikeout); int h = font.Height; g.DrawString("Regular", font, Brushes.Black, 0, 0); g.DrawString("Bold", bfont, Brushes.Black, 0, h); g.DrawString("Italic", ifont, Brushes.Black, 0, h * 2); g.DrawString("Bold-Italic", bifont, Brushes.Black, 0, h * 3); g.DrawString("Strikeout", sfont, Brushes.Black, 0, h * 4); g.DrawString("Underline", ufont, Brushes.Black, 0, h * 5); g.DrawString("Bold & Strikeout", bsfont, Brushes.Black, 0, h * 6); font.Dispose(); bfont.Dispose(); ifont.Dispose(); bifont.Dispose(); sfont.Dispose(); ufont.Dispose(); bsfont.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Wide Polyline: DrawLines
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class WidePolyline: Form {
public static void Main() { Application.Run(new WidePolyline()); } public WidePolyline() { 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, 25); grfx.DrawLines(pen, new Point[] { new Point( 25, 100), new Point(125, 100), new Point(125, 50), new Point(225, 50), new Point(225, 100), new Point(325, 100) }); }
}
</source>