private void button1_Click(object sender, EventArgs e) { var tilesetOffset = Convert.ToInt32(textBox1.Text, 16); var paletteOffset = Convert.ToInt32(textBox2.Text, 16); if (Program.GameFilePath != null) { var watch = Stopwatch.StartNew(); Tileset tileset; Palette palette; // Load the sprite and palette using (var gb = new RomReader(File.Open(Program.GameFilePath, FileMode.Open, FileAccess.Read))) { gb.Seek(tilesetOffset); tileset = gb.ReadCompressedTiles4(); gb.Seek(paletteOffset); palette = gb.ReadPalette(16); } // Create a new sprite var sprite = new Sprite(tileset, palette); sprite.Width = 8; // Destroy the existing image if (image != null) { image.Dispose(); image = null; } // Display and display the sprite if (renderer == null) { renderer = new SpriteRenderer(); } pictureBox1.Image = image = renderer.Draw(sprite); // Collect timing information watch.Stop(); label3.Text = watch.Elapsed.TotalSeconds + " s"; } }