Csharp/C Sharp/2D Graphics/Icon Image

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

Control Palette

<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;

   /// <summary>
   /// Summary description for ControlPalette.
   /// </summary>
   public class ControlPalette : System.Windows.Forms.Form
   {
       internal System.Windows.Forms.ImageList images;
       internal System.Windows.Forms.Label lblPictureThree;
       internal System.Windows.Forms.Label lblPictureTwo;
       internal System.Windows.Forms.Label lblPictureOne;
       private System.ruponentModel.IContainer components;
       public ControlPalette()
       {
           //
           // 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()
       {
           this.ruponents = new System.ruponentModel.Container();
           System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ControlPalette));
           this.images = new System.Windows.Forms.ImageList(this.ruponents);
           this.lblPictureThree = new System.Windows.Forms.Label();
           this.lblPictureTwo = new System.Windows.Forms.Label();
           this.lblPictureOne = new System.Windows.Forms.Label();
           this.SuspendLayout();
           // 
           // images
           // 
           this.images.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
           this.images.ImageSize = new System.Drawing.Size(16, 16);
           this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
           this.images.TransparentColor = System.Drawing.Color.Transparent;
           // 
           // lblPictureThree
           // 
           this.lblPictureThree.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
           this.lblPictureThree.Image = ((System.Drawing.Bitmap)(resources.GetObject("lblPictureThree.Image")));
           this.lblPictureThree.ImageIndex = 2;
           this.lblPictureThree.ImageList = this.images;
           this.lblPictureThree.Location = new System.Drawing.Point(8, 112);
           this.lblPictureThree.Name = "lblPictureThree";
           this.lblPictureThree.Size = new System.Drawing.Size(56, 48);
           this.lblPictureThree.TabIndex = 3;
           this.lblPictureThree.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDown);
           // 
           // lblPictureTwo
           // 
           this.lblPictureTwo.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
           this.lblPictureTwo.Image = ((System.Drawing.Bitmap)(resources.GetObject("lblPictureTwo.Image")));
           this.lblPictureTwo.ImageIndex = 1;
           this.lblPictureTwo.ImageList = this.images;
           this.lblPictureTwo.Location = new System.Drawing.Point(8, 60);
           this.lblPictureTwo.Name = "lblPictureTwo";
           this.lblPictureTwo.Size = new System.Drawing.Size(56, 48);
           this.lblPictureTwo.TabIndex = 2;
           this.lblPictureTwo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDown);
           // 
           // lblPictureOne
           // 
           this.lblPictureOne.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
           this.lblPictureOne.Image = ((System.Drawing.Bitmap)(resources.GetObject("lblPictureOne.Image")));
           this.lblPictureOne.ImageIndex = 0;
           this.lblPictureOne.ImageList = this.images;
           this.lblPictureOne.Location = new System.Drawing.Point(8, 8);
           this.lblPictureOne.Name = "lblPictureOne";
           this.lblPictureOne.Size = new System.Drawing.Size(56, 48);
           this.lblPictureOne.TabIndex = 1;
           this.lblPictureOne.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDown);
           // 
           // ControlPalette
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
           this.ClientSize = new System.Drawing.Size(76, 174);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.lblPictureThree,
                                                                         this.lblPictureTwo,
                                                                         this.lblPictureOne});
           this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
           this.Name = "ControlPalette";
           this.Text = "Pictures";
           this.ResumeLayout(false);
       }
       #endregion
       private void lbl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
       {
           Label lbl = (Label)sender;
           lbl.DoDragDrop(lbl.Image, DragDropEffects.Copy);
       }
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new ControlPalette());
       }
   }


      </source>


Cube Image

<source lang="csharp"> /* 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.ruponentModel; using System.Windows.Forms; using System.Data; namespace Cube {

   /// <summary>
   /// Summary description for CubeImage.
   /// </summary>
   public class CubeImage : System.Windows.Forms.Form
   {
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public CubeImage()
       {
           //
           // Required for Windows Form Designer support
           //
           InitializeComponent();
           this.Text = "Picture Cube";
           //
           // 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()
       {
           // 
           // CubeImage
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
           this.ClientSize = new System.Drawing.Size(292, 189);
           this.Name = "CubeImage";
           this.Text = "CubeImage";
       }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new CubeImage());
       }
       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 = @"IndonHouses.bmp";
           Image im1 = Image.FromFile(path);
           g.DrawImage(im1, p3Fro);
           path = @"Pyramids.BMP";
           Image im3 = Image.FromFile(path);
           g.DrawImage(im3, p3Top);
           path = @"TadjMahal.bmp";
           Image im2 = Image.FromFile(path);
           g.DrawImage(im2, p3Rig);
   
           g = Graphics.FromHwnd(this.Handle);
           g.DrawImage(bm, 1, 1);
           g.Dispose();
       }
   }

}


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/P14_ImageCube.zip">P14_ImageCube.zip( 317 k)</a>


Draw image

<source lang="csharp"> /* 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();
   }

} }


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/P01_Altamira.zip">P01_Altamira.zip( 109 k)</a>


Icon Image Draw

<source lang="csharp"> /* 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.ruponentModel; 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.ruponentModel.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();
   }
 }

}


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/IconImageDraw-c.zip">IconImageDraw-c.zip( 12 k)</a>


Image Class

<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X

  • /

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace ImageClass {

   /// <summary>
   /// Summary description for ImageClass.
   /// </summary>
   public class ImageClass : System.Windows.Forms.Form
   {
   private System.Windows.Forms.OpenFileDialog ofdBitmap;
   private System.Windows.Forms.Button cmdOpen;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
   private System.Windows.Forms.GroupBox groupBox1;
   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.Label label5;
   private System.Windows.Forms.Label lblHT;
   private System.Windows.Forms.Label lblWidth;
   private System.Windows.Forms.Label lblHdpi;
   private System.Windows.Forms.Label lblVdpi;
   private System.Windows.Forms.Label lblFormat;
   private System.Windows.Forms.Label label6;
   private System.Windows.Forms.Label lblSize;
   private System.Windows.Forms.Label lblDIM;
   private System.Windows.Forms.Label label8;
   private System.Windows.Forms.Button cmdSetRes;
   #region Class local variables
   Bitmap Bmp;
   RectangleF BMPContainer;
   #endregion
       public ImageClass()
       {
           //
           // Required for Windows Form Designer support
           //
           InitializeComponent();
     ofdBitmap.Filter= "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF";
     ofdBitmap.InitialDirectory = "";
   }
       /// <summary>
       /// Clean up any resources being used.
       /// </summary>
       protected override void Dispose( bool disposing )
       {
           if( disposing )
           {
               if (components != null) 
               {
                   components.Dispose();
               }
           }
     if (Bmp != null)
       Bmp.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.ofdBitmap = new System.Windows.Forms.OpenFileDialog();
     this.cmdOpen = new System.Windows.Forms.Button();
     this.groupBox1 = new System.Windows.Forms.GroupBox();
     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.label5 = new System.Windows.Forms.Label();
     this.lblHT = new System.Windows.Forms.Label();
     this.lblWidth = new System.Windows.Forms.Label();
     this.lblHdpi = new System.Windows.Forms.Label();
     this.lblVdpi = new System.Windows.Forms.Label();
     this.lblFormat = new System.Windows.Forms.Label();
     this.label6 = new System.Windows.Forms.Label();
     this.lblSize = new System.Windows.Forms.Label();
     this.lblDIM = new System.Windows.Forms.Label();
     this.label8 = new System.Windows.Forms.Label();
     this.cmdSetRes = new System.Windows.Forms.Button();
     this.groupBox1.SuspendLayout();
     this.SuspendLayout();
     // 
     // ofdBitmap
     // 
     this.ofdBitmap.FileOk += new System.ruponentModel.CancelEventHandler(this.OpenFile);
     // 
     // cmdOpen
     // 
     this.cmdOpen.Location = new System.Drawing.Point(16, 320);
     this.cmdOpen.Name = "cmdOpen";
     this.cmdOpen.Size = new System.Drawing.Size(72, 32);
     this.cmdOpen.TabIndex = 0;
     this.cmdOpen.Text = "Open";
     this.cmdOpen.Click += new System.EventHandler(this.Open);
     // 
     // groupBox1
     // 
     this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                           this.lblDIM,
                                                                           this.label8,
                                                                           this.lblSize,
                                                                           this.label6,
                                                                           this.lblFormat,
                                                                           this.lblVdpi,
                                                                           this.lblHdpi,
                                                                           this.lblWidth,
                                                                           this.lblHT,
                                                                           this.label5,
                                                                           this.label4,
                                                                           this.label3,
                                                                           this.label2,
                                                                           this.label1});
     this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
     this.groupBox1.Location = new System.Drawing.Point(144, 80);
     this.groupBox1.Name = "groupBox1";
     this.groupBox1.Size = new System.Drawing.Size(224, 224);
     this.groupBox1.TabIndex = 2;
     this.groupBox1.TabStop = false;
     this.groupBox1.Text = "Attributes";
     // 
     // label1
     // 
     this.label1.Location = new System.Drawing.Point(8, 24);
     this.label1.Name = "label1";
     this.label1.Size = new System.Drawing.Size(64, 16);
     this.label1.TabIndex = 0;
     this.label1.Text = "Height";
     // 
     // label2
     // 
     this.label2.Location = new System.Drawing.Point(8, 72);
     this.label2.Name = "label2";
     this.label2.Size = new System.Drawing.Size(64, 16);
     this.label2.TabIndex = 1;
     this.label2.Text = "Hdpi";
     // 
     // label3
     // 
     this.label3.Location = new System.Drawing.Point(8, 48);
     this.label3.Name = "label3";
     this.label3.Size = new System.Drawing.Size(64, 16);
     this.label3.TabIndex = 2;
     this.label3.Text = "Width";
     // 
     // label4
     // 
     this.label4.Location = new System.Drawing.Point(8, 96);
     this.label4.Name = "label4";
     this.label4.Size = new System.Drawing.Size(64, 16);
     this.label4.TabIndex = 3;
     this.label4.Text = "Vdpi";
     // 
     // label5
     // 
     this.label5.Location = new System.Drawing.Point(8, 120);
     this.label5.Name = "label5";
     this.label5.Size = new System.Drawing.Size(64, 16);
     this.label5.TabIndex = 4;
     this.label5.Text = "Format";
     // 
     // lblHT
     // 
     this.lblHT.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblHT.Location = new System.Drawing.Point(80, 24);
     this.lblHT.Name = "lblHT";
     this.lblHT.Size = new System.Drawing.Size(136, 16);
     this.lblHT.TabIndex = 5;
     // 
     // lblWidth
     // 
     this.lblWidth.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblWidth.Location = new System.Drawing.Point(80, 48);
     this.lblWidth.Name = "lblWidth";
     this.lblWidth.Size = new System.Drawing.Size(136, 16);
     this.lblWidth.TabIndex = 6;
     // 
     // lblHdpi
     // 
     this.lblHdpi.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblHdpi.Location = new System.Drawing.Point(80, 72);
     this.lblHdpi.Name = "lblHdpi";
     this.lblHdpi.Size = new System.Drawing.Size(136, 16);
     this.lblHdpi.TabIndex = 7;
     // 
     // lblVdpi
     // 
     this.lblVdpi.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblVdpi.Location = new System.Drawing.Point(80, 96);
     this.lblVdpi.Name = "lblVdpi";
     this.lblVdpi.Size = new System.Drawing.Size(136, 16);
     this.lblVdpi.TabIndex = 8;
     // 
     // lblFormat
     // 
     this.lblFormat.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblFormat.Location = new System.Drawing.Point(80, 120);
     this.lblFormat.Name = "lblFormat";
     this.lblFormat.Size = new System.Drawing.Size(136, 16);
     this.lblFormat.TabIndex = 9;
     // 
     // label6
     // 
     this.label6.Location = new System.Drawing.Point(8, 160);
     this.label6.Name = "label6";
     this.label6.Size = new System.Drawing.Size(64, 16);
     this.label6.TabIndex = 10;
     this.label6.Text = "Size";
     // 
     // lblSize
     // 
     this.lblSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblSize.Location = new System.Drawing.Point(80, 160);
     this.lblSize.Name = "lblSize";
     this.lblSize.Size = new System.Drawing.Size(136, 16);
     this.lblSize.TabIndex = 11;
     // 
     // lblDIM
     // 
     this.lblDIM.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
     this.lblDIM.Location = new System.Drawing.Point(80, 184);
     this.lblDIM.Name = "lblDIM";
     this.lblDIM.Size = new System.Drawing.Size(136, 16);
     this.lblDIM.TabIndex = 13;
     // 
     // label8
     // 
     this.label8.Location = new System.Drawing.Point(8, 184);
     this.label8.Name = "label8";
     this.label8.Size = new System.Drawing.Size(64, 16);
     this.label8.TabIndex = 12;
     this.label8.Text = "Dimensions";
     // 
     // cmdSetRes
     // 
     this.cmdSetRes.Location = new System.Drawing.Point(144, 320);
     this.cmdSetRes.Name = "cmdSetRes";
     this.cmdSetRes.Size = new System.Drawing.Size(128, 32);
     this.cmdSetRes.TabIndex = 3;
     this.cmdSetRes.Text = "Reset Resolution";
     this.cmdSetRes.Click += new System.EventHandler(this.SetRes);
     // 
     // ImageClass
     // 
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(392, 373);
     this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                 this.cmdSetRes,
                                                                 this.groupBox1,
                                                                 this.cmdOpen});
     this.MaximizeBox = false;
     this.MinimizeBox = false;
     this.Name = "ImageClass";
     this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
     this.Text = "ImageClass";
     this.Load += new System.EventHandler(this.ImageClass_Load);
     this.groupBox1.ResumeLayout(false);
     this.ResumeLayout(false);
   }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new ImageClass());
       }
   private void ImageClass_Load(object sender, System.EventArgs e)
   {
   }
   protected override void OnPaint( PaintEventArgs e)
   {
     Graphics G = e.Graphics;
     if ( Bmp != null )
     {
       //OK Folks. This is a BitBlt!
       G.DrawImage(Bmp, BMPContainer);
     }
     base.OnPaint(e);
   }
   private void Open(object sender, System.EventArgs e)
   {
     ofdBitmap.ShowDialog();
   }
   private void OpenFile(object sender, 
                         System.ruponentModel.CancelEventArgs e)
   {
     //Wondering what sender is?  Use reflection!
     if ( !( sender is System.Windows.Forms.OpenFileDialog ) )
       return;
     Bmp = new Bitmap( ofdBitmap.FileName );
     if ( Bmp != null )
     {
       ShowStats();
       DrawBMP();
     }
   }
   private void SetRes(object sender, System.EventArgs e)
   {
     if ( Bmp != null )
     {
       Bmp.SetResolution(150, 150);
       DrawBMP();
     }
   }
   private void DrawBMP()
   {
     if ( Bmp != null )
     {
       //Invalidate only the area where the image will be drawn
       Graphics G = this.CreateGraphics();
       GraphicsUnit GU = G.PageUnit;
       BMPContainer = Bmp.GetBounds( ref GU ); //X,Y = 0
       ShowStats();
       this.Invalidate( Rectangle.Round( BMPContainer ) );
       G.Dispose();
     }
   }
   private void ShowStats()
   {
     if ( Bmp != null )
     {
       //Show some properties here
       lblHT.Text = Bmp.Height.ToString();
       lblWidth.Text = Bmp.Width.ToString();
       lblVdpi.Text = Bmp.VerticalResolution.ToString();
       lblHdpi.Text = Bmp.HorizontalResolution.ToString();
       lblFormat.Text = Bmp.PixelFormat.ToString();
       lblSize.Text = Bmp.Size.ToString();
       lblDIM.Text = Bmp.PhysicalDimension.ToString();
     }
   }
   }

}


      </source>


Image Flip

<source lang="csharp"> /* 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.ruponentModel; using System.Windows.Forms; using System.Data; namespace ImageFlip {

   /// <summary>
   /// Summary description for ImageFlip.
   /// </summary>
   public class ImageFlip : System.Windows.Forms.Form
   {
       private System.Windows.Forms.GroupBox groupBox1;
       private System.Windows.Forms.CheckBox checkBox1;
       private System.Windows.Forms.RadioButton radioButton1;
       Image im = null;
       Image im2 = null;
       private System.Windows.Forms.Label label1;
       private System.Windows.Forms.RadioButton radioButton2;
       private System.Windows.Forms.RadioButton radioButton3;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public ImageFlip()
       {
           //
           // Required for Windows Form Designer support
           //
           InitializeComponent();
           this.Text = "Flipping and Rotating";
           this.radioButton1.Checked = false;
           this.label1.Text = "";
           this.groupBox1.Text = "RotateFlipType";
           this.checkBox1.Text = "Paint";
           this.radioButton1.Text = "Rotate180FlipY";
           this.radioButton2.Text = "Rotate180FlipX";
           this.radioButton3.Text = "Rotate180FlipNone";
           this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           //
           // 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()
       {
           this.groupBox1 = new System.Windows.Forms.GroupBox();
           this.radioButton1 = new System.Windows.Forms.RadioButton();
           this.checkBox1 = new System.Windows.Forms.CheckBox();
           this.label1 = new System.Windows.Forms.Label();
           this.radioButton2 = new System.Windows.Forms.RadioButton();
           this.radioButton3 = new System.Windows.Forms.RadioButton();
           this.groupBox1.SuspendLayout();
           this.SuspendLayout();
           // 
           // groupBox1
           // 
           this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                   this.radioButton3,
                                                                                   this.radioButton2,
                                                                                   this.radioButton1,
                                                                                   this.checkBox1});
           this.groupBox1.Location = new System.Drawing.Point(312, 64);
           this.groupBox1.Name = "groupBox1";
           this.groupBox1.Size = new System.Drawing.Size(248, 80);
           this.groupBox1.TabIndex = 1;
           this.groupBox1.TabStop = false;
           this.groupBox1.Text = "groupBox1";
           // 
           // radioButton1
           // 
           this.radioButton1.Location = new System.Drawing.Point(120, 16);
           this.radioButton1.Name = "radioButton1";
           this.radioButton1.Size = new System.Drawing.Size(112, 24);
           this.radioButton1.TabIndex = 1;
           this.radioButton1.Text = "radioButton1";
           // 
           // checkBox1
           // 
           this.checkBox1.Location = new System.Drawing.Point(16, 16);
           this.checkBox1.Name = "checkBox1";
           this.checkBox1.TabIndex = 0;
           this.checkBox1.Text = "checkBox1";
           this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
           // 
           // label1
           // 
           this.label1.Location = new System.Drawing.Point(8, 8);
           this.label1.Name = "label1";
           this.label1.Size = new System.Drawing.Size(304, 200);
           this.label1.TabIndex = 2;
           this.label1.Text = "label1";
           // 
           // radioButton2
           // 
           this.radioButton2.Location = new System.Drawing.Point(16, 48);
           this.radioButton2.Name = "radioButton2";
           this.radioButton2.TabIndex = 2;
           this.radioButton2.Text = "radioButton2";
           // 
           // radioButton3
           // 
           this.radioButton3.Location = new System.Drawing.Point(120, 48);
           this.radioButton3.Name = "radioButton3";
           this.radioButton3.Size = new System.Drawing.Size(120, 24);
           this.radioButton3.TabIndex = 3;
           this.radioButton3.Text = "radioButton3";
           // 
           // ImageFlip
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
           this.ClientSize = new System.Drawing.Size(560, 214);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.label1,
                                                                         this.groupBox1});
           this.Name = "ImageFlip";
           this.Text = "ImageFlip";
           this.groupBox1.ResumeLayout(false);
           this.ResumeLayout(false);
       }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new ImageFlip());
       }
       protected override void OnPaint(PaintEventArgs e)
       {   RotateFlip();   }
       private void label1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
       {   RotateFlip();   }
       private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
       {   RotateFlip();   }
       private void radioButtons_CheckedChanged(object sender, System.EventArgs e)
       {   RotateFlip();   }
       protected void RotateFlip()
       {
           Graphics g = Graphics.FromHwnd(this.label1.Handle);
           Brush b = new SolidBrush(this.label1.BackColor);
   
           if (this.checkBox1.Checked) 
           {
               if (im == null) ReadImage();
               Graphics g2 = Graphics.FromImage(im);  // For text "Himalaya"
               FontFamily ff = new FontFamily("Times New Roman");
               Font f = new Font(ff, 25, FontStyle.Bold);
               g2.DrawString("HIMALAYA", f, new SolidBrush(Color.Yellow), 170, 210);
               g2.Dispose();               
               im2 = (Image)im.Clone();
           
               int w2 = label1.Width/2, h2 = label1.Height/2;
               g.DrawImage(im, 0, 0, w2, h2);
       
               if(this.radioButton1.Checked)  // Rotate180FlipY
               {
                   im2.RotateFlip(RotateFlipType.Rotate180FlipY);
                   g.DrawImage(im2, w2, 0, w2, h2);
               }
               else g.FillRectangle(b, w2, 0, w2, h2);  // Clear old
               if(this.radioButton2.Checked)  // Rotate180FlipX
               {
                   im2.RotateFlip(RotateFlipType.Rotate180FlipX);
                   g.DrawImage(im2, 0, h2, w2, h2);
               }
               else g.FillRectangle(b, 0, h2, w2, h2);  // Clear old
       
               if(this.radioButton3.Checked)  // Rotate180FlipNone
               {
                   im2.RotateFlip(RotateFlipType.Rotate180FlipNone);
                   g.DrawImage(im2, w2, h2, w2, h2);  // Clear old
               }
               else g.FillRectangle(b, w2, h2, w2, h2);
               im2.Dispose();
           }
           else Clear(g);
   
           b.Dispose();    g.Dispose();
       }
       protected void ReadImage()
       {
           string path = @"Himalaya.bmp";
           im = Image.FromFile(path);
           this.radioButton1.Enabled = true;
           this.radioButton2.Enabled = true;
           this.radioButton3.Enabled = true;
       }
       protected void Clear(Graphics g)
       {
           g.Clear(this.BackColor);
           g.Dispose();        
           im = null;
           im2 = null;
           this.radioButton1.Checked = false;
           this.radioButton2.Checked = false;
           this.radioButton3.Checked = false;
           this.radioButton1.Enabled = false;
           this.radioButton2.Enabled = false;
           this.radioButton3.Enabled = false;
       }
   }

}


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/P16_RotateFlip.zip">P16_RotateFlip.zip( 240 k)</a>


Image Icon Form

<source lang="csharp"> /* 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.ruponentModel; 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.ruponentModel.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 Files\Microsoft Visual Studio .NET\VC#\CSharpProjectItems\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)
           // 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();
       }
   }

}


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/P19_WebIconThumbNail.zip">P19_WebIconThumbNail.zip( 19 k)</a>


Image Paint Simple Demo

<source lang="csharp"> /* 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://www.packtpub.ru/files/1604_CustomControls_SampleChapter.pdf

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

  • /

using System; using System.Collections.Generic; using System.ruponentModel; 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.ruponentModel.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 && (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.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;
   }

}

}


      </source>


Image Warper App

<source lang="csharp"> /* 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://www.packtpub.ru/files/1604_CustomControls_SampleChapter.pdf

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

  • /

using System; using System.Collections.Generic; using System.ruponentModel; 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.ruponentModel.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 && (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"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"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"s corner and then add the rotation value to it
               ang = GetBearingRadians(sourceAxle, temp[i], out dist) + degrees;
               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 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.ruponentModel.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 && (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
   }
   

}

      </source>


Image Zoom 1

<source lang="csharp"> /* 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.ruponentModel; using System.Windows.Forms; using System.Data; namespace ImageZoom {

   /// <summary>
   /// Summary description for ImageZoom.
   /// </summary>
   public class ImageZoom1 : System.Windows.Forms.Form
   {
       private System.Windows.Forms.Label label1;
       private System.Windows.Forms.GroupBox groupBox1;
       private System.Windows.Forms.RadioButton radioButton1;
       private System.Windows.Forms.RadioButton radioButton2;
       private System.Windows.Forms.RadioButton radioButton3;
       private System.Windows.Forms.RadioButton radioButton4;
       private System.Windows.Forms.Label label2;
       private System.Windows.Forms.CheckBox checkBox1;
       Image im = null;
       Image im2 = null;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public ImageZoom1()
       {
           //
           // Required for Windows Form Designer support
           //
           InitializeComponent();
           this.Text = "Zooming";
           this.label1.Text = "";
           this.groupBox1.Text = "Zoom";
           this.checkBox1.Text = "Paint";
           this.radioButton1.Checked = false;
           this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           this.radioButton4.CheckedChanged += new System.EventHandler(this.radioButtons_CheckedChanged);
           //
           // 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()
       {
           this.label1 = new System.Windows.Forms.Label();
           this.groupBox1 = new System.Windows.Forms.GroupBox();
           this.checkBox1 = new System.Windows.Forms.CheckBox();
           this.radioButton1 = new System.Windows.Forms.RadioButton();
           this.radioButton2 = new System.Windows.Forms.RadioButton();
           this.radioButton3 = new System.Windows.Forms.RadioButton();
           this.radioButton4 = new System.Windows.Forms.RadioButton();
           this.label2 = new System.Windows.Forms.Label();
           this.groupBox1.SuspendLayout();
           this.SuspendLayout();
           // 
           // label1
           // 
           this.label1.Location = new System.Drawing.Point(8, 16);
           this.label1.Name = "label1";
           this.label1.Size = new System.Drawing.Size(200, 240);
           this.label1.TabIndex = 0;
           this.label1.Text = "label1";
           // 
           // groupBox1
           // 
           this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                   this.checkBox1,
                                                                                   this.radioButton1,
                                                                                   this.radioButton2,
                                                                                   this.radioButton3,
                                                                                   this.radioButton4});
           this.groupBox1.Location = new System.Drawing.Point(232, 48);
           this.groupBox1.Name = "groupBox1";
           this.groupBox1.Size = new System.Drawing.Size(72, 128);
           this.groupBox1.TabIndex = 1;
           this.groupBox1.TabStop = false;
           this.groupBox1.Text = "groupBox1";
           // 
           // checkBox1
           // 
           this.checkBox1.Location = new System.Drawing.Point(8, 32);
           this.checkBox1.Name = "checkBox1";
           this.checkBox1.Size = new System.Drawing.Size(56, 24);
           this.checkBox1.TabIndex = 1;
           this.checkBox1.Text = "checkBox1";
           this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
           // 
           // radioButton1
           // 
           this.radioButton1.Location = new System.Drawing.Point(8, 64);
           this.radioButton1.Name = "radioButton1";
           this.radioButton1.Size = new System.Drawing.Size(16, 24);
           this.radioButton1.TabIndex = 0;
           this.radioButton1.Text = "radioButton1";
           // 
           // radioButton2
           // 
           this.radioButton2.Location = new System.Drawing.Point(40, 64);
           this.radioButton2.Name = "radioButton2";
           this.radioButton2.Size = new System.Drawing.Size(16, 24);
           this.radioButton2.TabIndex = 0;
           this.radioButton2.Text = "radioButton1";
           // 
           // radioButton3
           // 
           this.radioButton3.Location = new System.Drawing.Point(8, 96);
           this.radioButton3.Name = "radioButton3";
           this.radioButton3.Size = new System.Drawing.Size(16, 24);
           this.radioButton3.TabIndex = 0;
           this.radioButton3.Text = "radioButton1";
           // 
           // radioButton4
           // 
           this.radioButton4.Location = new System.Drawing.Point(40, 96);
           this.radioButton4.Name = "radioButton4";
           this.radioButton4.Size = new System.Drawing.Size(16, 24);
           this.radioButton4.TabIndex = 0;
           this.radioButton4.Text = "radioButton1";
           // 
           // label2
           // 
           this.label2.Location = new System.Drawing.Point(328, 16);
           this.label2.Name = "label2";
           this.label2.Size = new System.Drawing.Size(200, 240);
           this.label2.TabIndex = 0;
           this.label2.Text = "label1";
           // 
           // ImageZoom
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
           this.ClientSize = new System.Drawing.Size(536, 266);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.groupBox1,
                                                                         this.label1,
                                                                         this.label2});
           this.Name = "ImageZoom";
           this.Text = "ImageZoom";
           this.groupBox1.ResumeLayout(false);
           this.ResumeLayout(false);
       }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new ImageZoom1());
       }
       protected override void OnPaint(PaintEventArgs e)
       {   ImageZoom();    }
       private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
       {   ImageZoom();    }
       private void radioButtons_CheckedChanged(object sender, System.EventArgs e)
       {   ImageZoom();    }
       protected void ImageZoom()
       {
           Graphics g1 = Graphics.FromHwnd(this.label1.Handle);
           Graphics g2 = Graphics.FromHwnd(this.label2.Handle);
           Rectangle rec;
           Rectangle recPart;
           if (this.checkBox1.Checked) 
           {
               if (im == null) ReadImage();
        
               rec = new Rectangle(0, 0, label1.Width, label1.Height);
               g1.DrawImage(im, rec);
               
               // Center part:
               recPart = new Rectangle(im.Width/4, im.Height/4, im.Width/2,
                   im.Height/2);
               if(this.radioButton1.Checked)  // Left-Top part
                   recPart = new Rectangle(0, 0, im.Width/2, im.Height/2);
               if(this.radioButton2.Checked)  // Right-Top part
                   recPart = new Rectangle(im.Width/2, 0, im.Width/2, im.Height/2);
               if(this.radioButton3.Checked)  // Left-Down part
                   recPart = new Rectangle(0, im.Height/2, im.Width/2, im.Height/2);
               if(this.radioButton4.Checked)  // Right-Down part
                   recPart = new Rectangle(im.Width/2, im.Height/2, im.Width/2,
                       im.Height/2);
               g2.DrawImage(im, rec, recPart, GraphicsUnit.Pixel);
           }
           else 
           {
               Clear(g1);
               Clear(g2);
           }
           g1.Dispose();   g2.Dispose();      
       }
       protected void ReadImage()
       {
           string path = @"szeret3.BMP";
           im = Image.FromFile(path);
           this.radioButton1.Enabled = true;
           this.radioButton2.Enabled = true;
           this.radioButton3.Enabled = true;
           this.radioButton4.Enabled = true;
       }
       protected void Clear(Graphics g)
       {
           g.Clear(this.BackColor);
           g.Dispose();        
           im = null;
           im2 = null;
           this.radioButton1.Checked = false;
           this.radioButton2.Checked = false;
           this.radioButton3.Checked = false;
           this.radioButton4.Checked = false;
           
           this.radioButton1.Enabled = false;
           this.radioButton2.Enabled = false;
           this.radioButton3.Enabled = false;
           this.radioButton4.Enabled = false;
       }
   }

}

      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/P15_ImageZoom.zip">P15_ImageZoom.zip( 397 k)</a>


MetaFile and Draw

<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X

  • /

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace MetaFile_c {

   /// <summary>
   /// Summary description for MetaFile.
   /// </summary>
   public class MetaFile : System.Windows.Forms.Form
   {
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public MetaFile()
       {
           //
           // 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()
       {
     // 
     // MetaFile
     // 
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(292, 273);
     this.MaximizeBox = false;
     this.MinimizeBox = false;
     this.Name = "MetaFile";
     this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
     this.Text = "MetaFile";
     this.Load += new System.EventHandler(this.MetaFile_Load);
      }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new MetaFile());
       }
   private void MetaFile_Load(object sender, System.EventArgs e)
   {
     // Create a graphics object from the forms graphics object
     // and get the handle to it.
     using (Graphics FormGraphics = this.CreateGraphics())
     {
       IntPtr hdc = FormGraphics.GetHdc();
       // Now create a blank metafile using the graphics handle
       // This is the metafile where all drawing instructions will 
       // be recorded.
       Metafile mf = new Metafile("mymeta.emf", hdc);
       // In order to record drawing commands we need to draw on something
       // That something is a new graphics object
       using (Graphics MetaGraphics = Graphics.FromImage(mf))
       {
         using ( mf )
         {
           MetaGraphics.SmoothingMode = SmoothingMode.AntiAlias;
           //Now we are ready to draw on the metagraphics object
           MetaGraphics.DrawRectangle(Pens.Black, 10, 10, 100, 50 );
           MetaGraphics.DrawLine(Pens.Orange, 10, 70, 150, 100 );
         }
       }
       FormGraphics.ReleaseHdc(hdc);
     }
   }
   protected override void OnPaint( PaintEventArgs e )
   {
     Metafile mf = new Metafile("mymeta.emf");
     e.Graphics.DrawImage(mf, new Point(10,10));
   }
   }

}


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/MetaFile-c.zip">MetaFile-c.zip( 1 k)</a>


Picture Controls

<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X

  • /

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace PicControls {

   /// <summary>
   /// Summary description for PicControls.
   /// </summary>
   public class PicControls : System.Windows.Forms.Form
   {
       private System.Windows.Forms.PictureBox p;
       private System.Windows.Forms.Panel PicPanel;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public PicControls()
       {
           //
           // 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()
       {
     this.p = new System.Windows.Forms.PictureBox();
     this.PicPanel = new System.Windows.Forms.Panel();
     this.SuspendLayout();
     // 
     // p
     // 
     this.p.Location = new System.Drawing.Point(32, 40);
     this.p.Name = "p";
     this.p.Size = new System.Drawing.Size(136, 104);
     this.p.TabIndex = 0;
     this.p.TabStop = false;
     // 
     // PicPanel
     // 
     this.PicPanel.Location = new System.Drawing.Point(200, 120);
     this.PicPanel.Name = "PicPanel";
     this.PicPanel.Size = new System.Drawing.Size(200, 184);
     this.PicPanel.TabIndex = 1;
     // 
     // PicControls
     // 
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(424, 349);
     this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                 this.PicPanel,
                                                                 this.p});
     this.Name = "PicControls";
     this.Text = "PicControls";
     this.Load += new System.EventHandler(this.PicControls_Load);
     this.ResumeLayout(false);
   }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new PicControls());
       }
   private void PicControls_Load(object sender, System.EventArgs e)
   {
     Bitmap b = new Bitmap("crane.jpg");
     //PictureBox is "p"
     p.Image = (Image)b;
   }


   }

}


      </source>

<A href="http://www.nfex.ru/Code/CSharpDownload/PicControls.zip">PicControls.zip( 7 k)</a>