private void toolStripButton6_Click(object sender, EventArgs e) { Bitmap b = new Bitmap(80, 88); using (Graphics graphics = Graphics.FromImage((Image)b)) { graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.DrawImage(Image.FromFile(this.openFileDialog1.FileName), new Rectangle(4, 0, 70, 88), new Rectangle(0, 0, 70, 88), GraphicsUnit.Pixel); } Graphic.Tiles8x8 tiles8x8 = new Graphic.Tiles8x8(b, false); List <Color> colorList = new List <Color>(); foreach (Graphic.Tile8x8 allTile in tiles8x8.AllTiles) { colorList.Add(Graphic.GeneratePalette(allTile.ToBitmap(), 1, false, false)[0]); } Color[] palette = Graphic.GeneratePalette(colorList.ToArray(), 7, false); int num = 0; foreach (Color a in colorList) { this.selectedpalettes[num % 10, num / 10] = (byte)Graphic.NearestColor(a, palette); ++num; } this.pictureBox2.Invalidate(); }
public void Generate() { Bitmap b1 = new Bitmap(80, 88); using (Graphics graphics = Graphics.FromImage((Image)b1)) { graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.DrawImage(Image.FromFile(this.openFileDialog1.FileName), new Rectangle(4, 0, 70, 88), new Rectangle(0, 0, 70, 88), GraphicsUnit.Pixel); } Graphic.Tiles8x8 tiles8x8 = new Graphic.Tiles8x8(b1, false); List <Graphic.Tile8x8>[] tile8x8ListArray = new List <Graphic.Tile8x8>[7] { new List <Graphic.Tile8x8>(), new List <Graphic.Tile8x8>(), new List <Graphic.Tile8x8>(), new List <Graphic.Tile8x8>(), new List <Graphic.Tile8x8>(), new List <Graphic.Tile8x8>(), new List <Graphic.Tile8x8>() }; for (int index1 = 0; index1 < 11; ++index1) { for (int index2 = 0; index2 < 10; ++index2) { tile8x8ListArray[(int)this.selectedpalettes[index2, index1]].Add(tiles8x8.AllTiles[index1 * 10 + index2]); } } Color[][] colorArray = new Color[16][]; List <byte> byteList1 = new List <byte>(); for (int index1 = 0; index1 < 7; ++index1) { if (tile8x8ListArray[index1].Count != 0) { Bitmap b2 = new Bitmap(8 * tile8x8ListArray[index1].Count, 8); using (Graphics graphics = Graphics.FromImage((Image)b2)) { int num = 0; foreach (Graphic.Tile8x8 tile8x8 in tile8x8ListArray[index1]) { graphics.DrawImage((Image)tile8x8.ToBitmap(), num * 8, 0); ++num; } } Color[] palette = Graphic.GeneratePalette(b2, 16, true, true); palette[0] = Color.FromArgb(240, 152, 192); colorArray[index1] = palette; } else { colorArray[index1] = new Color[16]; colorArray[index1][0] = Color.FromArgb(240, 152, 192); for (int index2 = 1; index2 < 16; ++index2) { colorArray[index1][index2] = Color.Black; } } } for (int index1 = 0; index1 < 9; ++index1) { colorArray[index1 + 7] = new Color[16]; for (int index2 = 0; index2 < 16; ++index2) { colorArray[index1 + 7][index2] = Color.Black; } } for (int index1 = 0; index1 < 11; ++index1) { for (int index2 = 0; index2 < 10; ++index2) { byteList1.AddRange((IEnumerable <byte>)tiles8x8.AllTiles[index1 * 10 + index2].GetData(colorArray[(int)this.selectedpalettes[index2, index1]], Graphic.GXTexFmt.GX_TEXFMT_PLTT16, true)); } } List <Color> colorList = new List <Color>(); for (int index = 0; index < 16; ++index) { colorList.AddRange((IEnumerable <Color>)colorArray[index]); } this.PaletteData = Graphic.ToABGR1555(colorList.ToArray()); this.ImageData = byteList1.ToArray(); MemoryStream memoryStream = new MemoryStream(); EndianBinaryWriter endianBinaryWriter = new EndianBinaryWriter((Stream)memoryStream, Endianness.LittleEndian); for (int index = 0; index < 278; ++index) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } int index3 = 0; int index4 = 0; for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index3, index4] & 15) << 12) + 0 + 0 + (index4 * 10 + index3 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index3; } int index5 = 0; int index6 = index4 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index5, index6] & 15) << 12) + 0 + 0 + (index6 * 10 + index5 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index5; } int index7 = 0; int index8 = index6 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index7, index8] & 15) << 12) + 0 + 0 + (index8 * 10 + index7 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index7; } int index9 = 0; int index10 = index8 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index9, index10] & 15) << 12) + 0 + 0 + (index10 * 10 + index9 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index9; } int index11 = 0; int index12 = index10 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index11, index12] & 15) << 12) + 0 + 0 + (index12 * 10 + index11 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index11; } int index13 = 0; int index14 = index12 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index13, index14] & 15) << 12) + 0 + 0 + (index14 * 10 + index13 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index13; } int index15 = 0; int index16 = index14 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index15, index16] & 15) << 12) + 0 + 0 + (index16 * 10 + index15 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index15; } int index17 = 0; int index18 = index16 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index17, index18] & 15) << 12) + 0 + 0 + (index18 * 10 + index17 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index17; } int index19 = 0; int index20 = index18 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index19, index20] & 15) << 12) + 0 + 0 + (index20 * 10 + index19 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index19; } int index21 = 0; int index22 = index20 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index21, index22] & 15) << 12) + 0 + 0 + (index22 * 10 + index21 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index21; } int index23 = 0; int index24 = index22 + 1; for (int index1 = 0; index1 < 22; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } for (int index1 = 0; index1 < 10; ++index1) { int num = (((int)this.selectedpalettes[index23, index24] & 15) << 12) + 0 + 0 + (index24 * 10 + index23 + 1 & 1023); endianBinaryWriter.Write((ushort)num); ++index23; } for (int index1 = 0; index1 < 416; ++index1) { int num = 0 + 0 + 0; endianBinaryWriter.Write((ushort)num); } this.ScreenData = memoryStream.ToArray(); endianBinaryWriter.Close(); List <byte> byteList2 = new List <byte>(); byteList2.AddRange((IEnumerable <byte>) new byte[32]); byteList2.AddRange((IEnumerable <byte>) this.ImageData); this.pictureBox1.Image = (Image)Graphic.ConvertData(byteList2.ToArray(), 80, 88, this.PaletteData, this.ScreenData, 256, 256, Graphic.GXTexFmt.GX_TEXFMT_PLTT16, Graphic.NNSG2dCharacterFmt.NNS_G2D_CHARACTER_FMT_CHAR); }