private void btnDisassembleSpriteSheet_Click(object sender, EventArgs e)
        {
            if ((_ImagePattern.X * _ImagePattern.Y) == 0)
            {
                DisplayMessage("You haven't set the output image pattern yet. Enter it, or press the 'Auto Calculate button.");
                return;
            }

            string image_format     = (string)this.cboFileType.SelectedItem;
            string output_directory = this.txtOutputDirectory.Text;

            SpriteSheet.UpdateProgressBar update_progress_bar = new SpriteSheet.UpdateProgressBar(UpdateProgressbar);

            foreach (cImage item in _ImageList)
            {
                this.lbxFiles.SelectedItem = item.Filename;

                ResetProgressbar(_ImagePattern.X * _ImagePattern.Y);

                string output_file_name = item.Filename.Substring(item.Filename.LastIndexOf('\\') + 1);
                output_file_name = output_file_name.Substring(0, output_file_name.IndexOf('.'));

                if (!SpriteSheet.SeperateSpriteSheet(item.Filename, _ImagePattern, output_file_name, output_directory, image_format, update_progress_bar))
                {
                    DisplayMessage("Errors occured during processing.");
                    this.pbProgress.ForeColor = Color.Red;
                    return;
                }
            }

            System.Media.SystemSounds.Asterisk.Play();
            this.pbProgress.ForeColor = Color.Green;
        }
        private void btnBuildSpriteSheet_Click(object sender, EventArgs e)
        {
            if (this._ImageList.Count == 0)
            {
                return;
            }

            if ((_ImagePattern.X * _ImagePattern.Y) == 0)
            {
                CalcSpriteSheetDimensions();

                if ((_ImagePattern.X * _ImagePattern.Y) == 0)
                {
                    MessageBox.Show("Cannot automatically calculate correct image output arrangement.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            // if there is no filename selected, use the name of the first item
            string output_file_name;

            if (this.txtOutputFile.Text != string.Empty)
            {
                output_file_name = this.txtOutputFile.Text;
            }
            else
            {
                output_file_name = Path.GetFileNameWithoutExtension(_ImageList[0].Filename);
            }

            string output_directory = this.txtOutputDirectory.Text;

            KnownColor background_color = (KnownColor)Enum.Parse(typeof(KnownColor), this.cboBackgroundColor.SelectedItem.ToString());
            KnownColor mask_color       = (KnownColor)Enum.Parse(typeof(KnownColor), this.cboMaskColor.SelectedItem.ToString());

            string image_format = (string)this.cboFileType.SelectedItem;

            List <string> image_list = new List <string>();

            foreach (cImage item in _ImageList)
            {
                image_list.Add(item.Filename);
            }

            // setup progress bar
            ResetProgressbar(_ImageList.Count);
            SpriteSheet.UpdateProgressBar update_progress_bar = new SpriteSheet.UpdateProgressBar(UpdateProgressbar);

            if (!SpriteSheet.CreateSpriteSheet(image_list, _ImagePattern, background_color, mask_color, output_file_name, output_directory, image_format, update_progress_bar))
            {
                DisplayMessage("Errors occured during processing.");
                this.pbProgress.ForeColor = Color.Red;
            }
            else
            {
                System.Media.SystemSounds.Asterisk.Play();
                this.pbProgress.ForeColor = Color.Green;
            }
        }