Пример #1
0
        // 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();
        }
Пример #2
0
        // 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();
        }