void CreateTexture() { if (bgImage.Image != null) { bgImage.Image.Dispose(); bgImage.Image = null; } if (gridSet != null && gridSet.SetType == CharSetType.TileObject && gridSet.Width == 3 && gridSet.Height == 3) { var images = gridSet.GenerateCharImages(); var centerImage = images[4]; Bitmap bmpBack = new Bitmap(20 * 8, 20 * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(bmpBack); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; for (int y = 0; y < 20; y++) { for (int x = 0; x < 20; x++) { g.DrawImageUnscaled(centerImage, x * 8, y * 8); } } g.Dispose(); foreach (var bm in images) { bm.Dispose(); } bgImage.Image = bmpBack; } }
void DrawElement() { elementView.Image = null; if (currentTexture != null) { currentTexture.Dispose(); } if (set == null) { return; } if (scale == 1) { currentTexture = set.GenerateImage(); Brush br = new SolidBrush(overColor); Graphics g = Graphics.FromImage(currentTexture); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; g.FillRectangle(br, 0, 0, currentTexture.Width, currentTexture.Height); br.Dispose(); g.Dispose(); } else { if (set.Width < 3 && set.Height < 3) { scale = 1; currentTexture = set.GenerateImage(); if (overColor.A != 0) { Brush br = new SolidBrush(overColor); Graphics g = Graphics.FromImage(currentTexture); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; g.FillRectangle(br, 0, 0, currentTexture.Width, currentTexture.Height); br.Dispose(); g.Dispose(); } } else { int he = set.Height == 3 ? 3 + scale - 1 : set.Height; int wi = set.Width == 3 ? 3 + scale - 1 : set.Width; currentTexture = new Bitmap(wi * 8, he * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(currentTexture); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; var charImages = set.GenerateCharImages(); for (int y = 0; y < he; y++) { for (int x = 0; x < wi; x++) { int xI = set.Width == 3 ? (x == 0 ? 0 : (x == wi - 1 ? 2 : 1)) : x; int yI = set.Height == 3 ? (y == 0 ? 0 : (y == he - 1 ? 2 : 1)) : y; int index = set.GetCharIndex(xI, yI); g.DrawImageUnscaled(charImages[index], x * 8, y * 8); } } if (overColor.A != 0) { Brush br = new SolidBrush(overColor); g.FillRectangle(br, 0, 0, currentTexture.Width, currentTexture.Height); br.Dispose(); } foreach (var image in charImages) { image.Dispose(); } g.Dispose(); } } elementView.Image = currentTexture; this.Width = currentTexture.Width * pixelScale; this.Height = currentTexture.Height * pixelScale; }