private void LibraryTree_AfterSelect(object sender, TreeViewEventArgs e) { if (LibraryTree.SelectedNode.Level == 1) { SpriteLibrary.Sprites[index].SpriteData[frame].Data = Editor.CurrentSprite.ImageData; SpriteLibrary.Sprites[index].SpriteData[frame].Compressed = false; index = LibraryTree.SelectedNode.Parent.Index; frame = LibraryTree.SelectedNode.Index; NSE_Framework.Data.Sprite sprite = new NSE_Framework.Data.Sprite(SpriteLibrary.Sprites[index].Width, SpriteLibrary.Sprites[index].Height, NSE_Framework.Data.Translator.PaletteToSpriteType(SpriteLibrary.Sprites[index].Palette.Type)); sprite.Palette = SpriteLibrary.Sprites[index].Palette; sprite.ImageData = this.SpriteLibrary.Sprites[index].SpriteData[frame].Data; if (this.SpriteLibrary.Sprites[index].SpriteData[frame].Compressed) { sprite.ImageData = NSE_Framework.Data.Lz77.DecompressBytes(sprite.ImageData); } Editor.Sprites[0] = sprite; Editor.CurrentIndex = 0; } }
private void ButtonColorMatch_Click(object sender, EventArgs e) { OpenFileDialog iDialog = new OpenFileDialog(); iDialog.Title = "Select a file to import:"; iDialog.CheckFileExists = true; iDialog.Filter = "Importable Images|*.bmp;*.png*"; if (iDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK && !String.IsNullOrEmpty(iDialog.FileName)) { if (System.IO.File.Exists(iDialog.FileName)) { oldName = Path.GetFileNameWithoutExtension(iDialog.FileName); Bitmap bm = new Bitmap(iDialog.FileName); NewSprite = new NSE_Framework.Data.Sprite(bm.Width / 8, bm.Height / 8, NSE_Framework.Data.Sprite.SpriteType.Color16); NewSprite.Palette = new NSE_Framework.Data.SpritePalette(NSE_Framework.Data.SpritePalette.PaletteType.Color16); NewSprite.Palette.Colors = Colors; Color getColor; byte index = 0; for (int x = 0; x < NewSprite.Width * 8; x++) { for (int y = 0; y < NewSprite.Height * 8; y++) { index = 0; getColor = bm.GetPixel(x, y); for (int i = 1; i < 16 && index == 0; i++) { if (Colors[i].Color == getColor) { index = (byte)i; } } SetByte(x, y, index); } } Bitmap bs = new Bitmap(NewSprite.Width * 8, NewSprite.Height * 8); NSE_Framework.Draw.uDrawSprite(ref bs, NewSprite); PictureBoxSprite.Size = new System.Drawing.Size(NewSprite.Width * 8 + 2, NewSprite.Height * 8 + 2); PictureBoxSprite.Image = bs; PictureBoxSprite.Refresh(); ButtonSave.Enabled = true; } } }
public EditorForm(NSE_Framework.Data.Sprite Sprite, string FileName) { InitializeComponent(); this.WindowState = FormWindowState.Maximized; this.Editor.CurrentSprite = Sprite; if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color16) { this.Text = this.Text = FileName + " : @ " + (Sprite.Width * Sprite.Height * 32) + " bytes (4bpp)"; } else if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color256) { this.Text = this.Text = FileName + " : @ " + (Sprite.Width * Sprite.Height * 64) + " bytes (8bpp)"; } this.Editor.CurrentSprite = Sprite; this.FileName = FileName; }
public EditorForm(NSE_Framework.Data.Sprite Sprite) { InitializeComponent(); this.WindowState = FormWindowState.Maximized; this.Editor.CurrentSprite = Sprite; if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color16) { if (Sprite.UniqueImage) { if (Sprite.CompressedSprite != -1) { this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " Compressed @ " + Sprite.CompressedSprite.ToString() + " bytes (4bpp)"; } else { this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " @ " + (Sprite.Width * Sprite.Height * 32) + " bytes (4bpp)"; } } else { this.Text = "Sprite: @ " + (Sprite.Width * Sprite.Height * 32) + " bytes (4bpp)"; } } else if (Sprite.Type == NSE_Framework.Data.Sprite.SpriteType.Color256) { if (Sprite.UniqueImage) { if (Sprite.CompressedSprite != -1) { this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " Compressed @ " + Sprite.CompressedSprite.ToString() + " bytes (8bpp)"; } else { this.Text = "Sprite: 0x" + Sprite.ImageOffset.ToString("X") + " @ " + (Sprite.Width * Sprite.Height * 64) + " bytes (8bpp)"; } } else { this.Text = "Sprite: @ " + (Sprite.Width * Sprite.Height * 64) + " bytes (8bpp)"; } } this.Editor.CurrentSprite = Sprite; }
public EditorForm(NSE_Framework.IO.SpriteLibrary SpriteLibrary, string FileName) { InitializeComponent(); this.WindowState = FormWindowState.Maximized; NSE_Framework.Data.Sprite sprite = new NSE_Framework.Data.Sprite(SpriteLibrary.Sprites[0].Width, SpriteLibrary.Sprites[0].Height, NSE_Framework.Data.Translator.PaletteToSpriteType(SpriteLibrary.Sprites[0].Palette.Type)); sprite.Palette = SpriteLibrary.Sprites[0].Palette; if (SpriteLibrary.Sprites[0].SpriteData[0].Compressed) { sprite.ImageData = NSE_Framework.Data.Lz77.DecompressBytes(SpriteLibrary.Sprites[0].SpriteData[0].Data); } else { sprite.ImageData = SpriteLibrary.Sprites[0].SpriteData[0].Data; } LibraryTree.Nodes.Clear(); foreach (NSE_Framework.IO.SpriteSet sSet in SpriteLibrary.Sprites) { TreeNode node = new TreeNode(sSet.Name); foreach (NSE_Framework.IO.SpriteData sDat in sSet.SpriteData) { node.Nodes.Add(new TreeNode(sDat.Name)); } LibraryTree.Nodes.Add(node); } LibraryTree.SelectedNode = LibraryTree.Nodes[0].Nodes[0]; this.Editor.CurrentSprite = sprite; this.SpriteLibrary = SpriteLibrary; this.index = 0; this.frame = 0; this.Text = SpriteLibrary.Origin + " - " + FileName; this.FileName = FileName; this.SidePanel.Visible = true; }
public static void DrawSprite(ref Bitmap bitmap, NSE_Framework.Data.Sprite Sprite, Point Position, int scale = 1, int Length = -1) { DrawData(ref bitmap, Sprite.ImageData, Sprite.Palette, new Size(Sprite.Width, Sprite.Height), Position, scale, -1); }
public static void DrawSprite(ref Bitmap bitmap, NSE_Framework.Data.Sprite Sprite, int scale = 2, int Length = -1) { DrawSprite(ref bitmap, Sprite, Point.Empty, scale, Length); }
public static void ExportBitmap(string Filename, NSE_Framework.Data.Sprite Sprite) { if (Sprite.Type == Data.Sprite.SpriteType.Color16 || Sprite.Type == Data.Sprite.SpriteType.Color256) { //4bb bitmap http://en.wikipedia.org/wiki/BMP_file_format //header creation byte[] data; //= new byte[54 + 4 * Sprite.Palette.Colors.Length + (32 * (Sprite.Width * Sprite.Height))]; byte[] ilength; if (Sprite.Type == Data.Sprite.SpriteType.Color16) { data = new byte[118 + (32 * (Sprite.Width * Sprite.Height))]; //1 //0xF at offset 0x9 will mean 16 colors (this is not part of the bitmap format) data[9] = 0XF; data[0xA] = 0x76; //2 data[0x1C] = 4; ilength = BitConverter.GetBytes(32 * (Sprite.Width * Sprite.Height)); } else if (Sprite.Type == Data.Sprite.SpriteType.Color256) { data = new byte[1114 + (64 * (Sprite.Width * Sprite.Height))]; //1 //0xFF at offset 0x9 will mean 256 colors (this is not part of the bitmap format) data[9] = 0xFF; data[0xA] = 0x5A; data[0xB] = 0x4; //2 data[0x1C] = 8; ilength = BitConverter.GetBytes(64 * (Sprite.Width * Sprite.Height)); } else { throw new Exception("Unsupported sprite."); } data[0] = 0x42; data[1] = 0x4D; //Write Length byte[] flength = BitConverter.GetBytes(data.Length); flength.CopyTo(data, 2); //Add "NSE" to the bitmap data[6] = 0x4E; data[7] = 0x53; data[8] = 0x45; //1 data[0xE] = 40; byte[] width = BitConverter.GetBytes(Sprite.Width * 8); width.CopyTo(data, 0x12); byte[] height = BitConverter.GetBytes(Sprite.Height * 8); height.CopyTo(data, 0x16); data[0x1A] = 1; //2 ilength.CopyTo(data, 0x22); // Write Palette Table int i = 0; foreach (NSE_Framework.Data.GBAcolor color in Sprite.Palette.Colors) { data[0x36 + i * 4] = color.Blue; data[0x37 + i * 4] = color.Green; data[0x38 + i * 4] = color.Red; i++; } if (Sprite.Type == Data.Sprite.SpriteType.Color16) { for (int y = 0; y < Sprite.Height * 8; y++) { for (int x = 0; x < Sprite.Width * 4; x++) { data[118 + ((Sprite.Height * 8) - y - 1) * (Sprite.Width * 4) + x] = FlipByte(Sprite.ImageData[Position2Index(new Size(Sprite.Width * 8, Sprite.Height * 8), new Point(x * 2, y), Sprite.Type)]); } } } else if (Sprite.Type == Data.Sprite.SpriteType.Color256) { for (int y = 0; y < Sprite.Height * 8; y++) { for (int x = 0; x < Sprite.Width * 8; x++) { data[1114 + ((Sprite.Height * 8) - y - 1) * (Sprite.Width * 8) + x] = Sprite.ImageData[Position2Index(new Size(Sprite.Width * 8, Sprite.Height * 8), new Point(x, y), Sprite.Type)]; } } } Stream stream = File.Open(Filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); BinaryWriter bw = new BinaryWriter(stream); bw.Write(data); bw.Close(); stream.Close(); } }
void navigate() { sHeaderOffset = BitConverter.ToInt32(read.ReadBytes(SpriteTable + 4 * Index, 4), 0) - 0x8000000; byte[] HeaderBytes = read.ReadBytes(sHeaderOffset, 36); sWidth = BitConverter.ToInt32(new byte[4] { HeaderBytes[8], HeaderBytes[9], 0, 0 }, 0); sHeight = BitConverter.ToInt32(new byte[4] { HeaderBytes[10], HeaderBytes[11], 0, 0 }, 0); sPaletteIndex = HeaderBytes[2]; sPointer1 = BitConverter.ToInt32(new byte[4] { HeaderBytes[16], HeaderBytes[17], HeaderBytes[18], HeaderBytes[19] }, 0) - 0x8000000; sPointer2 = BitConverter.ToInt32(new byte[4] { HeaderBytes[20], HeaderBytes[21], HeaderBytes[22], HeaderBytes[23] }, 0) - 0x8000000; sPointer3 = BitConverter.ToInt32(new byte[4] { HeaderBytes[28], HeaderBytes[29], HeaderBytes[30], HeaderBytes[31] }, 0) - 0x8000000; ImageOffset = read.ReadPointer(sPointer3 + 8 * Frame); cFrameSize = read.ReadBytes(sPointer3 + 8 * Frame + 4, 2); #region FindPalette PaletteOffset = read.ReadPointer(PaletteTable); byte indicator = 0x1; int take = 0; while (indicator != 0x0) { if (read.ReadByte(PaletteTable + 8 * take + 4) == sPaletteIndex) { PaletteOffset = read.ReadPointer(PaletteTable + 8 * take); indicator = 0x0; } else { indicator = read.ReadByte(PaletteTable + 8 * take + 5); take++; } } #endregion NSE_Framework.Data.Sprite OW = new NSE_Framework.Data.Sprite(ImageOffset, PaletteOffset, sWidth / 8, sHeight / 8, NSE_Framework.Data.Sprite.SpriteType.Color16, read); Sprite = new Bitmap(sWidth, sHeight);//new Bitmap(sWidth * 2, sHeight * 2); byteSprite = read.ReadBytes(ImageOffset, sWidth * sHeight / 2); SpritePalette = new NSE_Framework.Data.SpritePalette(NSE_Framework.Data.SpritePalette.PaletteType.Color16, read.ReadBytes(PaletteOffset, 32)); NSE_Framework.Draw.uDrawData(ref Sprite, byteSprite, SpritePalette, new Size(sWidth / 8, sHeight / 8)); PictureBoxSprite.Image = Sprite; PictureBoxSprite.BackColor = SpritePalette.Colors[0].Color; PictureBoxSprite.Size = new System.Drawing.Size(sWidth * 2, sHeight * 2); PictureBoxSprite.Invalidate(); #region Labels LabelPaletteOffset.Text = "Palette " + sPaletteIndex.ToString("X2") + " Offset:"; dLabelStarterBytes.Text = HeaderBytes[0].ToString("X2") + HeaderBytes[1].ToString("X2"); // Byte 2 is the palette index // Byte 3 is always 0x11 dLabelTypeSize.Text = HeaderBytes[4].ToString("X2") + HeaderBytes[5].ToString("X2"); dLabelFrameSize.Text = HeaderBytes[7].ToString("X2") + HeaderBytes[6].ToString("X2"); // Bytes 8,9,10,11 are width and height dLabelWidth.Text = sWidth.ToString(); dLabelHeight.Text = sHeight.ToString(); dLabelPalReg.Text = HeaderBytes[12].ToString("X2") + "-" + HeaderBytes[13].ToString("X2") + " " + HeaderBytes[14].ToString("X2") + HeaderBytes[15].ToString("X2"); dLabelPointer1.Text = HeaderBytes[19].ToString("X2") + HeaderBytes[18].ToString("X2") + HeaderBytes[17].ToString("X2") + HeaderBytes[16].ToString("X2"); dLabelPointer2.Text = HeaderBytes[23].ToString("X2") + HeaderBytes[22].ToString("X2") + HeaderBytes[21].ToString("X2") + HeaderBytes[20].ToString("X2"); dLabelAnim.Text = HeaderBytes[27].ToString("X2") + HeaderBytes[26].ToString("X2") + HeaderBytes[25].ToString("X2") + HeaderBytes[24].ToString("X2"); dLabelPointer3.Text = HeaderBytes[31].ToString("X2") + HeaderBytes[30].ToString("X2") + HeaderBytes[29].ToString("X2") + HeaderBytes[28].ToString("X2"); dLabelSpriteOffset.Text = "0x" + sHeaderOffset.ToString("X2"); dLabelImageOffset.Text = "0x" + ImageOffset.ToString("X2"); dLabelPaletteOffset.Text = "0x" + PaletteOffset.ToString("X2"); dLabelCFrameSize.Text = cFrameSize[1].ToString("X2") + cFrameSize[0].ToString("X2"); TextBoxPalette.Text = sPaletteIndex.ToString("X2"); #endregion editBlock = 0; drawBlock(); fillCanvas(); fillPalette(); iSelectedColor.BackColor = SpritePalette.Colors[editColorIndex].Color; }
private void ButtonImport_Click(object sender, EventArgs e) { OpenFileDialog iDialog = new OpenFileDialog(); iDialog.Title = "Select a file to import:"; iDialog.CheckFileExists = true; iDialog.Filter = "Importable Sprite|*.nslx;*.bmp;*.png*"; if (iDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK & iDialog.FileName != "") { string extension = Path.GetExtension(iDialog.FileName).Substring(1).ToLower(); LibraryTree.Nodes.Clear(); LibraryTree.Nodes.Add("No Sprite Library loaded"); Library = null; Sprite = null; if (extension == "png" || extension == "bmp") { try { Sprite = NSE_Framework.IO.Import.ImportImage(iDialog.FileName); this.Text = "Import - " + Path.GetFileName(iDialog.FileName); previewBitmap = new Bitmap(Sprite.Width * 8, Sprite.Height * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb); NSE_Framework.Draw.uDrawSprite(ref previewBitmap, Sprite); Preview.Image = previewBitmap; DrawPalette(); LabelSize.Text = "Size: ( " + Sprite.Width.ToString() + ", " + Sprite.Height.ToString() + ")"; if (Sprite.Palette.Type == NSE_Framework.Data.SpritePalette.PaletteType.Color16) { LabelColors.Text = "Colors: 16"; } else if (Sprite.Palette.Type == NSE_Framework.Data.SpritePalette.PaletteType.Color256) { LabelColors.Text = "Colors: 256"; } ButtonSave.Enabled = true; ComboBoxMode.Enabled = true; ComboBoxMode.SelectedIndex = 0; ButtonSave.Focus(); } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else if (extension == "nslx") { LibraryTree.Nodes.Clear(); Library = NSE_Framework.IO.Import.ImportSpriteLibrary(iDialog.FileName); this.Text = "Import - " + this.Library.Origin; foreach (NSE_Framework.IO.SpriteSet sSet in Library.Sprites) { TreeNode node = new TreeNode(sSet.Name); foreach (NSE_Framework.IO.SpriteData sDat in sSet.SpriteData) { node.Nodes.Add(new TreeNode(sDat.Name)); } LibraryTree.Nodes.Add(node); } LibraryTree.SelectedNode = LibraryTree.Nodes[0].Nodes[0]; ButtonSave.Enabled = true; ComboBoxMode.Enabled = true; ComboBoxMode.SelectedIndex = 0; ButtonSave.Focus(); } } }