Icon Image Draw



   

/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds

Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace IconImageDraw_c
{
    /// <summary>
    /// Summary description for IconImageDraw.
    /// </summary>
  public class IconImageDraw : System.Windows.Forms.Form
  {
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;

    public IconImageDraw()
    {
      //
      // Required for Windows Form Designer support
      //
      InitializeComponent();

      this.MouseMove += new MouseEventHandler(this.DrawBox);
      this.MouseDown += new MouseEventHandler(this.StartBox);
      this.MouseUp += new MouseEventHandler(this.EndBox);
    }

    /// <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()
    {
      // 
      // IconImageDraw
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(492, 373);
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
      this.MinimizeBox = false;
      this.Name = "IconImageDraw";
      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
      this.Text = "IconImageDraw";
      this.Load += new System.EventHandler(this.IconImageDraw_Load);

    }
        #endregion

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    /// 

    //"R" holds the image, "Box" is the new image home currently being 
    //drawn by holding the mouse down and dragging
    private Rectangle R = Rectangle.Empty;
    private Rectangle Box = Rectangle.Empty;
    private Image I = Image.FromFile("sample.jpg");
    private Icon ThisIcon = new Icon("usa.ico");
    private bool OK2Paint = false;

    [STAThread]
    static void Main() 
    {
      Application.Run(new IconImageDraw());
    }

    private void IconImageDraw_Load(object sender, System.EventArgs e)
    {
    }

    protected override void OnPaint ( PaintEventArgs e )
    {
      //Always draw the icon
      e.Graphics.DrawIcon(ThisIcon, 1, 1);

      //Bail if rectangle is empty
      if ( R == Rectangle.Empty )
        return;

      if ( !OK2Paint )
        return;

      Pen P = new Pen(Brushes.Black, 3);
      e.Graphics.DrawRectangle(P, R);
      // Draw image based on rectangle.
      e.Graphics.DrawImage(I, R);

      P.Dispose();
    }

    private void DrawBox ( System.Object sender , MouseEventArgs m )
    {
      //Prints the x,y coordinates directly on the screen
      Graphics G = this.CreateGraphics();
      Rectangle TextR = new Rectangle(10, this.Height-50, 100, 20 );
      SolidBrush B = new SolidBrush(this.BackColor);

      G.FillRectangle(B, TextR);
      G.DrawString ( m.X.ToString() + ", " + m.Y.ToString(), 
                      new Font("Arial", 10),
                      Brushes.Black, TextR, StringFormat.GenericDefault );

      B.Dispose();

      //Draw the box as the mouse drags
      if ( m.Button == MouseButtons.Left )
      {
        if ( Box != Rectangle.Empty )
        {
          Pen P = new Pen(new SolidBrush(this.BackColor),1);
          G.DrawRectangle ( P, Box );
          P.Dispose();
        }
        Box = new Rectangle ( R.X, R.Y, m.X - R.X, m.Y - R.Y );
        G.DrawRectangle( Pens.Black, Box );
      }
    }

    private void StartBox( System.Object sender , MouseEventArgs m )
    {
      if ( m.Button == MouseButtons.Left )
      {
        R.X=m.X;
        R.Y=m.Y;
        OK2Paint = false;
      }
    }
    private void EndBox( System.Object sender , MouseEventArgs m )
    {
      R.Width = m.X - R.X;
      R.Height = m.Y - R.Y;
      OK2Paint = true;
      this.Refresh();
    }
  }
}



           
          


IconImageDraw-c.zip( 12 k)

Image Icon Form



   

/*
Professional Windows GUI Programming Using C#
by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury, 
   Zach Greenvoss, Shripad Kulkarni, Neil Whitlow

Publisher: Peer Information
ISBN: 1861007663
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using System.Net;
using System.IO;

namespace ImageIcon
{
    /// <summary>
    /// Summary description for ImageIconForm.
    /// </summary>
    public class ImageIconForm : System.Windows.Forms.Form
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public ImageIconForm()
        {
            //
            // 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()
        {
            // 
            // ImageIconForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Name = "ImageIconForm";
            this.Text = "ImageIconForm";
        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new ImageIconForm());
        }
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            // Icon 3 times:
            string p = @"C:Program FilesMicrosoft Visual Studio .NETVC#CSharpProjectItemsicon.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)

            // Thumbnail:
            p = @"MonetZsu.JPG";
            i = Image.FromFile(p);
            Image tn = i.GetThumbnailImage(50, 50, null, IntPtr.Zero);  // <=>(IntPtr)0
            g.DrawImage(tn, 100, 0, tn.Width, tn.Height);

            // Picture from Internet:
            p = "http://www.kosice.sk/newimg/kolazx4.jpg";
            WebRequest wReq = WebRequest.Create(p);  // using System.Net;
            WebResponse wRes = wReq.GetResponse();
            Stream strm = wRes.GetResponseStream();  // using System.IO;
            Image im = Image.FromStream(strm);
            g.DrawImage(im, 0, 50);
            strm.Close();
      
            g.Dispose();
        }
    }
}


           
          


P19_WebIconThumbNail.zip( 19 k)

Draw image



   

/*
Professional Windows GUI Programming Using C#
by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury, 
   Zach Greenvoss, Shripad Kulkarni, Neil Whitlow

Publisher: Peer Information
ISBN: 1861007663
*/
// Change the path(s) if needed. If you have VS.NET write:
// "....Altamira5.bmp" or @"....Altamira5.bmp"
// otherwise
// "Altamira5.bmp"
// and compile with:
// csc Altamira.cs

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Altamira
{
public class Altamira1 : Form
{
    Pen p;
    SolidBrush b, bT = new SolidBrush(Color.Black);
    string path = "Altamira5.bmp";  // change the path if needed
    Image im;
    Font f;

    public Altamira1()
    {
        InitializeComponent();
        MyIni();
    }

    private void InitializeComponent()
    {
        this.SuspendLayout();

        this.ClientSize = new System.Drawing.Size(290, 260);
        this.Text = "Altamira";

        this.ResumeLayout(false);
    }
    private void MyIni()
    {
        Color cP = Color.Gray;
        Color cB = Color.LightGray;

        p = new Pen(cP, 6);
        b = new SolidBrush(cB);
        im = Image.FromFile(path);
        f = new Font(new FontFamily("Times New Roman"), 10);
    }
    static void Main() 
    {
        Application.Run(new Altamira1());
    }
    protected override void OnPaint(PaintEventArgs pea)
    {
        Sketch();
        //SketchDBuf();
    }
    private void Sketch()
    {
        Graphics g = Graphics.FromHwnd(this.Handle);  // <=> g = CreateGraphics();

        g.FillRectangle(b, 4, 4, 260, 220);  // passe-partout
        g.DrawRectangle(p, 4, 4, 260, 220);  // frame
        g.DrawImage(im, 33, 35, 200, 145 );  // image
        g.DrawString("ALTAMIRA", f, bT, 180, 190);  // text

        g.Dispose();
    }
    private void SketchDBuf()
    {
        int hh = 3, w = 260, h = 220;   

        Graphics g;
        Bitmap bm = new Bitmap(w + 2*hh, h + 2*hh);
        g = Graphics.FromImage(bm);  // buffer graphics

        g.FillRectangle(b, hh , hh, w, h);  // passe-partout
        g.DrawRectangle(new Pen(Color.Gray,  2*hh), hh, hh, w, h);  // frame
        g.DrawImage(im, hh + 30, hh + 32, 200, 145);  // image
        g.DrawString("ALTAMIRA", f, bT, 180, 190);  // text

        g = Graphics.FromHwnd(this.Handle);  // real graphics
        g.DrawImage(bm, 1, 1);

        g.Dispose();
    }
}
}


           
          


P01_Altamira.zip( 109 k)

Image Warper App


   

/*
Code revised from chapter 6


GDI+ Custom Controls with Visual C# 2005
By Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward 

Language English
Paperback 272 pages [191mm x 235mm]
Release date July 2006
ISBN 1904811604

Sample chapter
http://international.us.server12.fileserver.kutayzorlu.com/files/download/2017/01/1604_CustomControls_SampleChapter_uuid-4b87262d-deb6-49f2-8cc3-13c5abbb3ded_crc-0.pdf



For More info on GDI+ Custom Control with Microsoft Visual C# book 
visit website www.packtpub.com 

*/ 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ImageWarperApp
{
    public partial class Form1 : Form
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void applyButton_Click(object sender, EventArgs e)
        {
            imageWarperControl1.ImageAngle = Double.Parse(angleBox.Text) * System.Math.PI / 180;
            imageWarperControl1.ImageScale = Double.Parse(scaleBox.Text) / 100;
            imageWarperControl1.ImageSkew = new SizeF(float.Parse(skewHorizontalBox.Text), float.Parse(skewVerticalBox.Text));

        }

        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing &amp;&amp; (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()
        {
            this.angleBox = new System.Windows.Forms.TextBox();
            this.scaleBox = new System.Windows.Forms.TextBox();
            this.skewHorizontalBox = new System.Windows.Forms.TextBox();
            this.skewVerticalBox = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.applyButton = new System.Windows.Forms.Button();
            this.imageWarperControl1 = new ImageWarperApp.ImageWarperControl();
            this.SuspendLayout();
            // 
            // angleBox
            // 
            this.angleBox.Location = new System.Drawing.Point(128, 42);
            this.angleBox.Name = "angleBox";
            this.angleBox.Size = new System.Drawing.Size(100, 20);
            this.angleBox.TabIndex = 1;
            // 
            // scaleBox
            // 
            this.scaleBox.Location = new System.Drawing.Point(128, 100);
            this.scaleBox.Name = "scaleBox";
            this.scaleBox.Size = new System.Drawing.Size(100, 20);
            this.scaleBox.TabIndex = 2;
            // 
            // skewHorizontalBox
            // 
            this.skewHorizontalBox.Location = new System.Drawing.Point(128, 157);
            this.skewHorizontalBox.Name = "skewHorizontalBox";
            this.skewHorizontalBox.Size = new System.Drawing.Size(100, 20);
            this.skewHorizontalBox.TabIndex = 3;
            // 
            // skewVerticalBox
            // 
            this.skewVerticalBox.Location = new System.Drawing.Point(128, 217);
            this.skewVerticalBox.Name = "skewVerticalBox";
            this.skewVerticalBox.Size = new System.Drawing.Size(100, 20);
            this.skewVerticalBox.TabIndex = 4;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(7, 45);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(104, 13);
            this.label1.TabIndex = 5;
            this.label1.Text = "Rotation Angle (deg)";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(7, 103);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(84, 13);
            this.label2.TabIndex = 6;
            this.label2.Text = "Scale Factor (%)";
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(7, 160);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(117, 13);
            this.label3.TabIndex = 7;
            this.label3.Text = "Skew Horizontal Factor";
            // 
            // label4
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(7, 220);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(105, 13);
            this.label4.TabIndex = 8;
            this.label4.Text = "Skew Vertical Factor";
            // 
            // applyButton
            // 
            this.applyButton.BackColor = System.Drawing.SystemColors.ActiveCaption;
            this.applyButton.Location = new System.Drawing.Point(61, 285);
            this.applyButton.Name = "applyButton";
            this.applyButton.Size = new System.Drawing.Size(118, 34);
            this.applyButton.TabIndex = 9;
            this.applyButton.Text = "Apply New Settings";
            this.applyButton.UseVisualStyleBackColor = false;
            this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
            // 
            // imageWarperControl1
            // 
            this.imageWarperControl1.ImageAngle = 0;
            this.imageWarperControl1.ImageScale = 0;
            this.imageWarperControl1.ImageSkew = new System.Drawing.SizeF(0F, 0F);
            this.imageWarperControl1.Location = new System.Drawing.Point(253, 45);
            this.imageWarperControl1.Name = "imageWarperControl1";
            this.imageWarperControl1.Size = new System.Drawing.Size(185, 192);
            this.imageWarperControl1.TabIndex = 0;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(450, 342);
            this.Controls.Add(this.applyButton);
            this.Controls.Add(this.label4);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.skewVerticalBox);
            this.Controls.Add(this.skewHorizontalBox);
            this.Controls.Add(this.scaleBox);
            this.Controls.Add(this.angleBox);
            this.Controls.Add(this.imageWarperControl1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private ImageWarperControl imageWarperControl1;
        private System.Windows.Forms.TextBox angleBox;
        private System.Windows.Forms.TextBox scaleBox;
        private System.Windows.Forms.TextBox skewHorizontalBox;
        private System.Windows.Forms.TextBox skewVerticalBox;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Button applyButton;
        
    }
    public partial class ImageWarperControl : UserControl
    {
        public ImageWarperControl()
        {
            InitializeComponent();
        }

        private void ImageWarperControl_Load(object sender, EventArgs e)
        {
            
            img = CreatePicture();
        }

        private void ImageWarperControl_Paint(object sender, PaintEventArgs e)
        {
                  // set up all our parameters first before calling DrawWarpedPicture.
      Graphics target = this.CreateGraphics(); //draw onto the form&#039;s surface
      PointF pivotOnImage = new PointF(img.Width / 2, img.Height / 2);
      PointF pivotOnTarget = new PointF(this.Width / 2, this.Height / 2);
      double rotate = imageAngle;
      double scaleFactor = imageScale;
      SizeF skewing = imageSkew;
      DrawWarpedPicture(target, img, pivotOnImage, pivotOnTarget, rotate, scaleFactor, skewing);
       }
        private Image CreatePicture()
        {
            // Create a new Bitmap object, 50 x 50 pixels in size
            Image canvas = new Bitmap(50, 50);
            // create an object that will do the drawing operations
            Graphics artist = Graphics.FromImage(canvas);
            // draw a few shapes on the canvas picture
            artist.Clear(Color.Lime);
            artist.FillEllipse(Brushes.Red, 3, 30, 30, 30);
            artist.DrawBezier(new Pen(Color.Blue, 3), 0, 0, 40, 15, 10, 35, 50, 50);
            // now the drawing is done, we can discard the artist object
            artist.Dispose();
            // return the picture
            return canvas;
        }
        public void DrawWarpedPicture(
            Graphics surface,   //the surface to draw on
            Image img,    //the image to draw
            PointF sourceAxle,  //pivot point passing through image.
            PointF destAxle,  //pivot point&#039;s position on destination surface
            double degrees,  //degrees through which the image is rotated clockwise
            double scale,     //size multiplier
            SizeF skew      //the slanting effect size, applies BEFORE scaling or rotation
          )
        {
            //give this array temporary coords that will be overwritten in the loop below
            //the skewing is done here orthogonally, before any trigonometry is applied
            PointF[] temp = new PointF[3] {  new PointF(skew.Width, -skew.Height),
                    new PointF((img.Width - 1) + skew.Width, skew.Height),
                    new PointF(-skew.Width,(img.Height - 1) - skew.Height) };
            double ang, dist;
            //convert the images corner points into scaled, rotated, skewed and translated points
            for (int i = 0; i < 3; i++)
            {
                //measure the angle to the image&#039;s corner and then add the rotation value to it
                ang = GetBearingRadians(sourceAxle, temp&#91;i&#93;, out dist) + degrees;
                dist *= scale; //scale
                temp&#91;i&#93; = new PointF((Single)((Math.Cos(ang) * dist) + destAxle.X), (Single)((Math.Sin(ang) * dist) + destAxle.Y));
            }
            surface.DrawImage(img, temp);
        }
        private static double GetBearingRadians(PointF reference, PointF target, out double distance)
        {
            double dx = target.X - reference.X;
            double dy = target.Y - reference.Y;
            double result = Math.Atan2(dy, dx);
            distance = Math.Sqrt((dx * dx) + (dy * dy));
            if (result < 0)
                result += (Math.PI * 2); //add  the negative number to 360 degrees to correct the atan2 value
            return result;
        }
        private double imageAngle;
        private double imageScale;
        private SizeF imageSkew;
        private Image img = null;
        public double ImageAngle
        {
            get
            {
                return imageAngle;
            }
            set
            {
                if (imageAngle != value)
                {
                    imageAngle = value;
                    Invalidate();
                }
            }
        }
        public double ImageScale
        {
            get
            {
                return imageScale;
            }
            set
            {
                if (imageScale != value)
                {
                    imageScale = value;
                    Invalidate();
                }
            }
        }
        public SizeF ImageSkew
        {
            get
            {
                return imageSkew;
            }
            set
            {
                if (imageSkew != value)
                {
                    imageSkew = value;
                    Invalidate();
                }
            }
        }

        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing &amp;&amp; (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Component 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()
        {
            this.SuspendLayout();
            // 
            // ImageWarperControl
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Name = "ImageWarperControl";
            this.Load += new System.EventHandler(this.ImageWarperControl_Load);
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.ImageWarperControl_Paint);
            this.ResumeLayout(false);

        }
        #endregion
    }
    
}

           
          


Image Paint Simple Demo

/*
Code revised from chapter 6

GDI+ Custom Controls with Visual C# 2005
By Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward

Language English
Paperback 272 pages [191mm x 235mm]
Release date July 2006
ISBN 1904811604

Sample chapter
http://international.us.server12.fileserver.kutayzorlu.com/files/download/2017/01/1604_CustomControls_SampleChapter_uuid-c42b9aba-e49d-40de-b471-e86e75ebe5f0_crc-0.pdf

For More info on GDI+ Custom Control with Microsoft Visual C# book
visit website www.packtpub.com

*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace WarpControlApp1
{
public partial class Form1 : Form
{
Image img = null;
public Form1()
{
InitializeComponent();
}
private Image CreatePicture()
{
// Create a new Bitmap object, 50 x 50 pixels in size
Image canvas = new Bitmap(50, 50);
// create an object that will do the drawing operations
Graphics artist = Graphics.FromImage(canvas);
// draw a few shapes on the canvas picture
artist.Clear(Color.Lime);
artist.FillEllipse(Brushes.Red, 3, 30, 30, 30);
artist.DrawBezier(new Pen(Color.Blue, 3), 0, 0, 40, 15, 10, 35, 50, 50);
// now the drawing is done, we can discard the artist object
artist.Dispose();
//return the picture
return canvas;
}

private void Form1_Load(object sender, EventArgs e)
{
img = CreatePicture();
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
Random rand = new Random(); // randomises our drawing parameters
// set up all our parameters first before calling DrawWarpedPicture.
Graphics target = this.CreateGraphics(); // draw onto the form's surface
PointF pivotOnImage = new PointF(img.Width / 2, img.Height / 2);
PointF pivotOnTarget = new PointF((Single)e.X, (Single)e.Y);
double rotate = rand.NextDouble() * 360;
double scaleFactor = 0.2 + (rand.NextDouble() * 2);
SizeF skewing = new SizeF(rand.Next(-20, 21), rand.Next(-20, 21));
// draw it!
ImageWarper warper = new ImageWarper();
warper.DrawWarpedPicture(target, img, pivotOnImage, pivotOnTarget, rotate, scaleFactor, skewing);

}

private System.ComponentModel.IContainer components = null;

///

/// Clean up any resources being used.
///

/// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

///

/// Required method for Designer support – do not modify
/// the contents of this method with the code editor.
///

private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = “”;
this.Text = “Click the form to draw”;
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}

#endregion

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

}
public class ImageWarper : Component
{
public void DrawWarpedPicture(
Graphics surface, // the surface to draw on
Image img, // the image to draw
PointF sourceAxle, // pivot point passing through image.
PointF destAxle, // pivot point's position on destination surface
double degrees, // degrees through which the image is rotated clockwise
double scale, // size multiplier
SizeF skew // the slanting effect size, applies BEFORE scaling or rotation
)
{
// give this array temporary coords that will be overwritten in the loop below
// the skewing is done here orthogonally, before any trigonometry is applied
PointF[] temp = new PointF[3] {
new PointF(skew.Width, -skew.Height),
new PointF((img.Width – 1) + skew.Width, skew.Height),
new PointF(-skew.Width,(img.Height – 1) – skew.Height) };
double ang, dist;
double radians = degrees * (Math.PI / 180);
// convert the images corner points into scaled, rotated, skewed and translated points
for (int i = 0; i < 3; i++) { // measure the angle to the image's corner and then add the rotation value to it ang = GetBearingRadians(sourceAxle, temp[i], out dist) + radians; dist *= scale; // scale temp[i] = new PointF((Single)((Math.Cos(ang) * dist) + destAxle.X), (Single)((Math.Sin(ang) * dist) + destAxle.Y)); } surface.DrawImage(img, temp); } private double GetBearingRadians(PointF reference, PointF target, out double distance) { double dx = target.X - reference.X; double dy = target.Y - reference.Y; double result = Math.Atan2(dy, dx); distance = Math.Sqrt((dx * dx) + (dy * dy)); if (result < 0) result += (Math.PI * 2); // add the negative number to 360 degrees to correct the atan2 value return result; } } } [/csharp]

List all Hatch Brush styles

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
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.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;
int yOffSet = 10;

Array obj = Enum.GetValues(typeof(HatchStyle));

for(int i = 0; i < 10; i++) { HatchStyle temp = (HatchStyle)obj.GetValue(i); HatchBrush theBrush = new HatchBrush(temp, Color.White, Color.Black); g.DrawString(temp.ToString(), new Font("Times New Roman", 10), new SolidBrush(Color.Black), 0, yOffSet); g. FillEllipse(theBrush, 150, yOffSet, 200, 25); yOffSet += 40; } } } [/csharp]

Hatch Brush Style: WideUpwardDiagonal


   


  using System;
  using System.Drawing;
  using System.Drawing.Drawing2D;
  using System.Collections;
  using System.ComponentModel;
  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 = "Pen Cap App";
      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;
      g.FillRectangle(Brushes.White, this.ClientRectangle);
      HatchBrush hb = new HatchBrush(
           HatchStyle.WideUpwardDiagonal,
           Color.White,
           Color.Black);
      Pen hp = new Pen(hb, 20);
      g.DrawRectangle(hp, 15, 15, 200, 200);
      hb.Dispose();
      hp.Dispose();
    }

    private void Form1_Resize(object sender, System.EventArgs e)
    {
      Invalidate();
    }
  }