private void DataDumpButton_Click(object sender, EventArgs e) { if (this.DrawBimap == null) { return; } string savefilename = ImageFormRef.ExportImage(this , this.DrawBimap , InputFormRef.MakeSaveImageFilename(this, U.ToHexString((uint)Image.Value)) , (int)U.atoi(this.USE_PALETTE_NUMBER.Text) ); if (savefilename == "") { return; } if (ImageOption.SelectedIndex == 0 || ImageOption.SelectedIndex == 3) {//圧縮画像 byte[] image = LZ77.GetCompressDataLow(Program.ROM.Data , U.toOffset(Image.Value)); if (image.Length > 0) { U.WriteAllBytes(savefilename + ".dmp", image); } } else if (ImageOption.SelectedIndex == 2) {//第2圧縮画像 byte[] image = LZ77.GetCompressDataLow(Program.ROM.Data , U.toOffset(Image.Value)); if (image.Length > 0) { U.WriteAllBytes(savefilename + ".dmp", image); } byte[] image2 = LZ77.GetCompressDataLow(Program.ROM.Data , U.toOffset(Image2.Value)); if (image.Length > 0) { U.WriteAllBytes(savefilename + ".img2.dmp", image2); } } else {//無圧縮画像 uint image_size = ((uint)PicWidth.Value * 8 / 2) * ((uint)PicHeight.Value * 8); byte[] image = U.getBinaryData(Program.ROM.Data, U.toOffset(Image.Value), image_size); U.WriteAllBytes(savefilename + ".dmp", image); } if (PaletteOption.SelectedIndex == 1) {//lz77 palette byte[] palette = LZ77.GetCompressDataLow(Program.ROM.Data , U.toOffset(PALETTE.Value)); if (palette.Length > 0) { U.WriteAllBytes(savefilename + ".pal.dmp", palette); } } else {//通常のパレット uint palette_addr = ToPaletteOffset((uint)PALETTE.Value, (uint)PALETTENO.Value); uint palette_count = U.atoi(this.USE_PALETTE_NUMBER.Text); if (palette_count < 0) {//パレットがないのはありえないので. palette_count = 1; } if (ImageOption.SelectedIndex == 3) {//256色 palette_count = 16; } byte[] palette = Program.ROM.getBinaryData(palette_addr, 0x20 * palette_count); U.WriteAllBytes(savefilename + ".pal.dmp", palette); } if (TSAOption.SelectedIndex == 0) {//TSAを利用しない } else if (TSAOption.SelectedIndex == 1 || TSAOption.SelectedIndex == 2) {//圧縮TSAを利用する , or 圧縮ヘッダ付きTSAを利用する byte[] tsa = LZ77.GetCompressDataLow(Program.ROM.Data , U.toOffset(TSA.Value)); if (tsa.Length > 0) { U.WriteAllBytes(savefilename + ".tsa.dmp", tsa); } } else if (TSAOption.SelectedIndex == 3) {//無圧縮ヘッダ付きTSAを利用する uint tsa_addr = U.toOffset(TSA.Value); uint tsa_size = ImageUtil.CalcByteLengthForHeaderTSAData(Program.ROM.Data, (int)tsa_addr); if (tsa_size > 0) { byte[] tsa = Program.ROM.getBinaryData(tsa_addr, tsa_size); U.WriteAllBytes(savefilename + ".tsa.dmp", tsa); } } else if (TSAOption.SelectedIndex == 4) {//無圧縮TSAを利用する uint width = (uint)PicWidth.Value * 8; uint height = (uint)PicHeight.Value * 8; uint tsa_addr = U.toOffset(TSA.Value); uint tsa_size = width * height / 32; if (tsa_size > 0) { byte[] tsa = Program.ROM.getBinaryData(tsa_addr, tsa_size); U.WriteAllBytes(savefilename + ".tsa.dmp", tsa); } } else if (TSAOption.SelectedIndex == 5) {//パレットマップとして解釈する uint width = (uint)PicWidth.Value * 8; uint height = (uint)PicHeight.Value * 8; uint tsa_addr = U.toOffset(TSA.Value); uint tsa_size = width * height / 2; if (tsa_size > 0) { byte[] tsa = Program.ROM.getBinaryData(tsa_addr, tsa_size); U.WriteAllBytes(savefilename + ".tsa.dmp", tsa); } } }