Inheritance: System.Windows.Forms.Form
        private void btnImport_Click(object sender, EventArgs e)
        {
            if (dlgImport.ShowDialog() == DialogResult.OK)
            {
                Bitmap bmp = new Bitmap(dlgImport.FileName);
                if ((bmp.Width != (arrWidth << 3)) || (bmp.Height != (arrHeight << 3)))
                {
                    MessageBox.Show("The image is the wrong size. It's " + bmp.Width + "x" + bmp.Height +
                        ", but it should be " + (arrWidth << 3) + "x" + (arrHeight << 3) + ".",
                        "Wrong size");
                    return;
                }

                // Prompt for options
                var f = new frmGfxImportDialog();
                DialogResult res = f.ShowDialog();
                if (res != DialogResult.OK) return;

                GfxImportSettings g = M3Settings.MainSettings.GfxImportSettings;

                try
                {
                    object[] o = GfxProvider.SetArrangement(bmp, Tileset, 0, (EditLimit == -1) ?
                         TileCount : EditLimit,
                         g.UseTileset,
                         g.UseFlips,
                         g.UsePalette ? Palette.Entries[CurrentPalette] : null,
                         g.UsePalette ? CurrentPalette : 0,
                         g.TransparentColor,
                         g.UseTransparency
                         );

                    // Success!
                    Arrangement = (ArrEntry[])o[0];
                    Palette.Entries[CurrentPalette] = (Color[])o[1];

                    int colorsDropped = (int)o[2];
                    if (colorsDropped > 0)
                        MessageBox.Show("There were too many colors in the image, so only the 15 most common ones were preserved." +
                            Environment.NewLine + colorsDropped + " color(s) were dropped.", "Too many colors");

                    SetPalette(Palette);

                    RenderTileset();
                    RenderTile();
                    RenderArr();

                    RefreshTileset();
                    RefreshTile();
                    RefreshArr();
                }
                catch (TileCountException ee)
                {
                    MessageBox.Show("This image needs " +
                        ee.Tilecount + " tiles, but we only have room for " + ee.Tilelimit +
                        " tiles.", "Too many tiles");
                }
                catch (TileMismatchException ee)
                {
                    MessageBox.Show("This image contains tiles not in the current tileset." +
                    Environment.NewLine + "The problematic tile is at (" + (ee.TileX << 3) + ", " +
                    (ee.TileY << 3) + ").",
                        "No tile match");
                }

                f.Dispose();
                bmp.Dispose();
            }
        }
        private void btnImport_Click(object sender, EventArgs e)
        {
            if (dlgImport.ShowDialog() == DialogResult.OK)
            {
                Bitmap bmp = new Bitmap(dlgImport.FileName);
                if ((bmp.Width != (arrWidth << 3)) || (bmp.Height != (arrHeight << 3)))
                {
                    MessageBox.Show("The image is the wrong size. It's " + bmp.Width + "x" + bmp.Height +
                                    ", but it should be " + (arrWidth << 3) + "x" + (arrHeight << 3) + ".",
                                    "Wrong size");
                    return;
                }

                // Prompt for options
                var          f   = new frmGfxImportDialog();
                DialogResult res = f.ShowDialog();
                if (res != DialogResult.OK)
                {
                    return;
                }

                GfxImportSettings g = M3Settings.MainSettings.GfxImportSettings;

                try
                {
                    object[] o = GfxProvider.SetArrangement(bmp, Tileset, 0, (EditLimit == -1) ?
                                                            TileCount : EditLimit,
                                                            g.UseTileset,
                                                            g.UseFlips,
                                                            g.UsePalette ? Palette.Entries[CurrentPalette] : null,
                                                            g.UsePalette ? CurrentPalette : 0,
                                                            g.TransparentColor,
                                                            g.UseTransparency
                                                            );

                    // Success!
                    Arrangement = (ArrEntry[])o[0];
                    Palette.Entries[CurrentPalette] = (Color[])o[1];

                    int colorsDropped = (int)o[2];
                    if (colorsDropped > 0)
                    {
                        MessageBox.Show("There were too many colors in the image, so only the 15 most common ones were preserved." +
                                        Environment.NewLine + colorsDropped + " color(s) were dropped.", "Too many colors");
                    }

                    SetPalette(Palette);

                    RenderTileset();
                    RenderTile();
                    RenderArr();

                    RefreshTileset();
                    RefreshTile();
                    RefreshArr();
                }
                catch (TileCountException ee)
                {
                    MessageBox.Show("This image needs " +
                                    ee.Tilecount + " tiles, but we only have room for " + ee.Tilelimit +
                                    " tiles.", "Too many tiles");
                }
                catch (TileMismatchException ee)
                {
                    MessageBox.Show("This image contains tiles not in the current tileset." +
                                    Environment.NewLine + "The problematic tile is at (" + (ee.TileX << 3) + ", " +
                                    (ee.TileY << 3) + ").",
                                    "No tile match");
                }

                f.Dispose();
                bmp.Dispose();
            }
        }