// Generate private void generateFontTableImage_Click(object sender, EventArgs e) { // Capture image of font table's region on screen Graphics graphic = this.fontTable.CreateGraphics(); Size s = this.fontTable.Size; Bitmap import = new Bitmap(s.Width, s.Height, graphic); Graphics memGraphic = Graphics.FromImage(import); IntPtr dc1 = graphic.GetHdc(); IntPtr dc2 = memGraphic.GetHdc(); BitBlt(dc2, 0, 0, this.fontTable.ClientRectangle.Width, this.fontTable.ClientRectangle.Height, dc1, 0, 0, SRCCOPY); graphic.ReleaseHdc(dc1); memGraphic.ReleaseHdc(dc2); import.MakeTransparent(fontTable.BackColor); // Convert to bitmap int[] palette = new int[4]; for (int i = 0; i < 4; i++) { palette[i] = this.palette[i]; } byte[] graphicBlock = new byte[(import.Width * import.Height) / 4]; Do.PixelsToBPP( Do.ImageToPixels(import, new Size(import.Width, import.Height)), graphicBlock, new Size(import.Width / 8, import.Height / 8), palette, 0x10); // Write to font's graphics switch (fontType) { case FontType.Menu: Do.CopyOverFontTable(graphicBlock, font, new Size(import.Width / 8, import.Height / 12), palette); break; case FontType.Dialogue: Do.CopyOverFontTable(graphicBlock, font, new Size(import.Width / 16, import.Height / 12), palette); break; case FontType.Description: case FontType.Triangles: Do.CopyOverFontTable(graphicBlock, font, new Size(import.Width / 8, import.Height / 8), palette); break; } // Redraw text image in dialogue forms ownerForm.RedrawText(); }
// contextmenustrip1 private void importToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = settings.LastRomPath; openFileDialog1.Title = "Import font graphics"; openFileDialog1.Filter = "Image files (*.bmp,*.png,*.gif,*.jpg)|*.bmp;*.png;*.gif;*.jpg|Binary files (*.bin)|*.bin|All files (*.*)|*.*"; openFileDialog1.FilterIndex = 0; openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() != DialogResult.OK) { return; } FileStream fs; BinaryReader br; Bitmap import; byte[] graphicBlock; int[] palette = new int[4]; fs = File.OpenRead(openFileDialog1.FileName); if (Path.GetExtension(openFileDialog1.FileName) == ".jpg" || Path.GetExtension(openFileDialog1.FileName) == ".gif" || Path.GetExtension(openFileDialog1.FileName) == ".png") { for (int i = 0; i < 4; i++) { palette[i] = this.palette[i]; } import = new Bitmap(Image.FromFile(openFileDialog1.FileName)); graphicBlock = new byte[(import.Width * import.Height) / 4]; Do.PixelsToBPP( Do.ImageToPixels(import, new Size(import.Width, import.Height)), graphicBlock, new Size(import.Width / 8, import.Height / 8), palette, 0x10); switch (FontType) { case FontType.Menu: Do.CopyOverFontTable(graphicBlock, font, new Size(import.Width / 8, import.Height / 12), palette); font[0].Width = 4; break; case FontType.Dialogue: Do.CopyOverFontTable(graphicBlock, font, new Size(import.Width / 16, import.Height / 12), palette); font[0].Width = 4; break; } } else { br = new BinaryReader(fs); switch (FontType) { case FontType.Menu: graphicBlock = new byte[0xC00]; graphicBlock = br.ReadBytes(0xC00); foreach (FontCharacter f in fontMenu) { Array.Copy(graphicBlock, f.Index * 0x18, f.Graphics, 0, 0x18); } break; case FontType.Dialogue: graphicBlock = new byte[0x1800]; graphicBlock = br.ReadBytes(0x1800); foreach (FontCharacter f in fontDialogue) { Array.Copy(graphicBlock, f.Index * 0x30, f.Graphics, 0, 0x30); } break; case FontType.Description: graphicBlock = new byte[0x800]; graphicBlock = br.ReadBytes(0x800); foreach (FontCharacter f in fontDescription) { Array.Copy(graphicBlock, f.Index * 0x10, f.Graphics, 0, 0x10); } break; case FontType.Triangles: graphicBlock = new byte[0x1C0]; graphicBlock = br.ReadBytes(0x1C0); foreach (FontCharacter f in fontTriangle) { Array.Copy(graphicBlock, f.Index * 0x20, f.Graphics, 0, 0x20); } break; } br.Close(); } fs.Close(); InitializeFontCharacter(); SetFontTableImage(); dialoguesEditor.RedrawText(); }