Bitmap Demo

image_pdfimage_print



   

/*
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.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace BitMapExt_c
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class BitMapExt : System.Windows.Forms.Form
    {

    #region Class Local Variables

    private Bitmap WholeBMP;
    private Bitmap SaveBMP;
    private Bitmap TLBMP;
    private Bitmap TRBMP;
    private Bitmap BLBMP;
    private Bitmap BRBMP;

    private Rectangle DrawRect;
    private Point TLpt;
    private Point TRpt;
    private Point BLpt;
    private Point BRpt;
    private int Counter = 0;

    private ImageAttributes Ia;

    #endregion 
    private System.ComponentModel.IContainer components;
    private System.Windows.Forms.Timer T1;

    private System.Windows.Forms.Button cmdGo;



    public BitMapExt() {
            InitializeComponent();

      this.SetStyle(ControlStyles.DoubleBuffer, true);
      this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

      WholeBMP = new Bitmap("crane.jpg");
      DrawRect = new Rectangle(0, 0, WholeBMP.Width, WholeBMP.Height);
      DrawRect.X = this.Width/2 - WholeBMP.Width/2;
      DrawRect.Y = this.Height/2 - WholeBMP.Height/2;
      T1.Interval = 75;
      T1.Enabled = false;
    }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
      if (WholeBMP != null)
        WholeBMP.Dispose();

      if (SaveBMP != null)
        SaveBMP.Dispose();
      if (TLBMP != null)
        TLBMP.Dispose();
      if (TRBMP != null)
        TRBMP.Dispose();
      if (BLBMP != null)
        BLBMP.Dispose();
      if (BRBMP != null)
        BRBMP.Dispose();
      if (Ia != null)
        Ia.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.components = new System.ComponentModel.Container();
      this.cmdGo = new System.Windows.Forms.Button();
      this.T1 = new System.Windows.Forms.Timer(this.components);
      this.SuspendLayout();
      // 
      // cmdGo
      // 
      this.cmdGo.Location = new System.Drawing.Point(328, 336);
      this.cmdGo.Name = "cmdGo";
      this.cmdGo.Size = new System.Drawing.Size(48, 24);
      this.cmdGo.TabIndex = 0;
      this.cmdGo.Text = "GO";
      this.cmdGo.Click += new System.EventHandler(this.Explode);
      // 
      // T1
      // 
      this.T1.Tick += new System.EventHandler(this.T1_Tick);
      // 
      // Form1
      // 
      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.cmdGo});
      this.MaximizeBox = false;
      this.MinimizeBox = false;
      this.Name = "Form1";
      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
      this.Text = "Exploding Bitmap";
      this.Load += new System.EventHandler(this.Form1_Load);
      this.ResumeLayout(false);

    }
        #endregion

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

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

    protected override void OnPaint(PaintEventArgs e)
    {
      Graphics G = e.Graphics;

      if ( WholeBMP != null )    
      {
        G.DrawImage(WholeBMP, DrawRect);
        return;
      }
      
      if ( TLBMP != null )
        G.DrawImage( TLBMP, new Rectangle(TLpt, TLBMP.Size),
          0, 0,
          TLBMP.Width, TLBMP.Height,
          GraphicsUnit.Pixel, 
          Ia );

      if ( TRBMP != null )
        G.DrawImage( TRBMP, new Rectangle(TRpt, TRBMP.Size),
          0, 0,
          TRBMP.Width, TRBMP.Height,
          GraphicsUnit.Pixel, 
          Ia );
      
      if ( BLBMP != null )
        G.DrawImage( BLBMP, new Rectangle(BLpt, BLBMP.Size),
          0, 0,
          BLBMP.Width, BLBMP.Height,
          GraphicsUnit.Pixel, 
          Ia );
      
      if ( BRBMP != null )
        G.DrawImage( BRBMP, new Rectangle(BRpt, BRBMP.Size),
          0, 0,
          BRBMP.Width, BRBMP.Height,
          GraphicsUnit.Pixel, 
          Ia );
      }

    private void Explode(object sender, System.EventArgs e)
    {
      if ( WholeBMP != null )
      {
        cmdGo.Enabled = false;
        int L = 0;
        int T = 0;
        int Cx = (int)(WholeBMP.Width/2);
        int Cy = (int)(WholeBMP.Height/2);

        Rectangle R1 = new Rectangle( L, T, Cx, Cy );
        Rectangle R2 = new Rectangle( Cx, T, Cx, Cy );
        Rectangle R3 = new Rectangle( L, Cy, Cx, Cy );
        Rectangle R4 = new Rectangle( Cx, Cy, Cx, Cy );

        SaveBMP = WholeBMP;
        TLBMP = WholeBMP.Clone(new Rectangle( L, T, Cx, Cy ), 
                                WholeBMP.PixelFormat);
        TRBMP = WholeBMP.Clone(new Rectangle( Cx, T, Cx, Cy ), 
                                WholeBMP.PixelFormat);
        BLBMP = WholeBMP.Clone(new Rectangle( L, Cy, Cx, Cy ), 
                                WholeBMP.PixelFormat);
        BRBMP = WholeBMP.Clone(new Rectangle( Cx, Cy, Cx, Cy ), 
                                WholeBMP.PixelFormat);
        WholeBMP = null;
        
        int Gap = 10;
        TLpt = new Point( DrawRect.Left-Gap, DrawRect.Top-Gap );
        TRpt = new Point( DrawRect.Left+Cx+Gap, DrawRect.Top-Gap );
        BLpt = new Point( DrawRect.Left-Gap, DrawRect.Top+Cy+Gap );
        BRpt = new Point( DrawRect.Left+Cx+Gap, DrawRect.Top+Cy+Gap );

        T1.Enabled = true;
        Invalidate();
      }
    }

    private void T1_Tick(object sender, System.EventArgs e)
    {
      Counter += 1;
      if ( Counter == 62 )
      {
        Counter = 0;
        cmdGo.Enabled = true;
        T1.Enabled = false;
        WholeBMP = SaveBMP;
      }

      TLpt.X-=1;
      TLpt.Y-=1;

      TRpt.X+=1;
      TRpt.Y-=1;

      BLpt.X-=1;
      BLpt.Y+=1;

      BRpt.X+=1;
      BRpt.Y+=1;

      // Initialize a color matrix.
      //Set the alpha for the whole image
      float[][] m ={new float[] {1, 0, 0, 0, 0},
                    new float[] {0, 1, 0, 0, 0},
                    new float[] {0, 0, 1, 0, 0},
                    new float[] {0, 0, 0, (1-(float)Counter/62), 0}, 
                    new float[] {0, 0, 0, 0, 1}}; 
      ColorMatrix cm = new ColorMatrix(m);

      // Create an ImageAttributes object and set its color matrix.
      Ia = new ImageAttributes();
      Ia.SetColorMatrix( cm, ColorMatrixFlag.Default, 
                              ColorAdjustType.Bitmap);

      TLBMP.RotateFlip(RotateFlipType.Rotate90FlipNone);
      TRBMP.RotateFlip(RotateFlipType.Rotate90FlipNone);
      BLBMP.RotateFlip(RotateFlipType.Rotate90FlipNone);
      BRBMP.RotateFlip(RotateFlipType.Rotate90FlipNone);

      Invalidate();
    }
    }
}



           
          


BitMapExt-c.zip( 8 k)