/*
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();
}
}
}